home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 9 / FM Towns Free Software Collection 9.iso / t_os / tool / ugoku / src / vdsys / dv02s_s.asm next >
Assembly Source File  |  1994-11-16  |  103KB  |  6,167 lines

  1. ;        vram → buffer → v02
  2. ;        表示モード16専用転送ルーチン
  3. ;        1993 8/14  Hiroshi TODA
  4.  
  5.     .386p
  6.  
  7. extrn    VSYNC_counter    :    dword
  8.  
  9. public    v02_digit_timing_flag0
  10. public    v02_digit_buf0
  11. public    v02_digit_counter
  12. public    v02_digit_wait
  13. public    v02_digit_work
  14. public    v02_digit_ytab
  15. public    v02_digit_ctab
  16.  
  17. ;-------------------------------------------
  18.  
  19. DGROUP        group    v02_data
  20.  
  21. v02_data    segment dword public 'DATA' use32
  22.  
  23. v02_digit_timing_flag0    dd    ?
  24.             dd    ?
  25.             dd    ?
  26.             dd    ?
  27.             dd    ?
  28.             dd    ?
  29.             dd    ?
  30.             dd    ?
  31. v02_digit_buf0        dd    ?
  32.             dd    ?
  33.             dd    ?
  34.             dd    ?
  35.             dd    ?
  36.             dd    ?
  37.             dd    ?
  38.             dd    ?
  39. v02_digit_counter    dd    ?
  40. v02_digit_wait        dd    ?
  41. v02_digit_work        dd    ?
  42. v02_digit_ytab        dd    ?
  43. v02_digit_ctab        dd    ?
  44.  
  45. v02_digit_wk        dd    ?
  46.  
  47. v02_data    ends
  48.  
  49. ;-------------------------------------------
  50.  
  51. cseg    segment    dword public use32 'CODE'
  52.     assume    cs:cseg,ds:cseg
  53.  
  54.  
  55. ;    diskに録画する関数
  56.  
  57.  
  58. ;int v02_trans_128_0()
  59.  
  60.     public    v02_trans_128_0
  61.     db    'v02_trans_128_0',15
  62. v02_trans_128_0    proc    near
  63.     push    ebp
  64. ;    mov    ebp,esp
  65.     push    esi
  66.     push    edi
  67.     push    ebx
  68.  
  69.     cld
  70.  
  71.     lea    ebx,ds:v02_digit_timing_flag0
  72.     mov    ecx,ds:v02_digit_counter
  73.     cmp    dword ptr [ecx*4][ebx],0
  74.     jne    #vd10
  75.     mov    eax,ds:v02_digit_wait
  76.     cmp    eax,VSYNC_counter
  77.     ja    #vd10
  78.     sub    VSYNC_counter,eax
  79.  
  80.     inc    dword ptr [ecx*4][ebx]
  81.     lea    ebx,ds:v02_digit_buf0
  82.     mov    edi,[ecx*4][ebx]    ; buf(圧縮画の入る所) -> edi
  83.     inc    ecx
  84.     cmp    ecx,8
  85.     jb    short #vd00
  86.     xor    ecx,ecx
  87. #vd00:    mov    ds:v02_digit_counter,ecx
  88.  
  89.     push    edi
  90.  
  91.     mov    edi,ds:v02_digit_work    ; work(原画の入る所) -> edi
  92.     mov    ax,10ch
  93.     mov    fs,ax
  94.     mov    esi,32+1024*4*12
  95.     xor    ecx,ecx
  96.     mov    edx,96
  97. #vd01:    mov    cl,64            ; vram 転送
  98.     rep    movs dword ptr [edi],fs:[esi]
  99.     add    esi,1024*4-256
  100.     dec    edx
  101.     jne    short #vd01
  102.  
  103.     pop    edi
  104.  
  105.     mov    esi,ds:v02_digit_work    ; work(原画ある所) -> esi
  106.     mov    ebp,ds:v02_digit_ytab    ; Ytable -> ebx
  107.     xor    edx,edx
  108.     mov    ecx,128*96/8
  109. #vd04:    lodsd
  110.     mov    dx,ax
  111.     shr    eax,16
  112.     mov    dl,ds:[edx][ebp]
  113.     mov    dh,ds:[eax][ebp]
  114.     mov    bl,ds:[edx][ebp].32768
  115.     lodsd
  116.     mov    dx,ax
  117.     shr    eax,16
  118.     mov    dl,ds:[edx][ebp]
  119.     mov    dh,ds:[eax][ebp]
  120.     mov    bh,ds:[edx][ebp].32768
  121.  
  122.     shl    ebx,16
  123.  
  124.     lodsd
  125.     mov    dx,ax
  126.     shr    eax,16
  127.     mov    dl,ds:[edx][ebp]
  128.     mov    dh,ds:[eax][ebp]
  129.     mov    bl,ds:[edx][ebp].32768
  130.     lodsd
  131.     mov    dx,ax
  132.     shr    eax,16
  133.     mov    dl,ds:[edx][ebp]
  134.     mov    dh,ds:[eax][ebp]
  135.     mov    bh,ds:[edx][ebp].32768
  136.  
  137.     rol    ebx,16
  138.     mov    eax,ebx
  139.     stosd
  140.  
  141.     loop    #vd04
  142.  
  143.     mov    esi,ds:v02_digit_work    ; work(原画ある所) -> esi
  144.     mov    ebp,ds:v02_digit_ctab    ; Ctable -> ebx
  145.     mov    edx,96/2
  146. #vd08:    mov    ecx,128/8
  147. #vd09:    lodsd
  148.     and    eax,0000ffffh
  149.     mov    bl,ds:[eax][ebp]
  150.     lodsd
  151.     and    eax,0000ffffh
  152.     mov    bh,ds:[eax][ebp]
  153.  
  154.     shl    ebx,16
  155.  
  156.     lodsd
  157.     and    eax,0000ffffh
  158.     mov    bl,ds:[eax][ebp]
  159.     lodsd
  160.     and    eax,0000ffffh
  161.     mov    bh,ds:[eax][ebp]
  162.  
  163.     rol    ebx,16
  164.     mov    eax,ebx
  165.     stosd
  166.     loop    #vd09
  167.  
  168.     add    esi,128*2
  169.     dec    edx
  170.     jne    short #vd08
  171.  
  172. #vd10:    pop    ebx
  173.     pop    edi
  174.     pop    esi
  175. ;    mov    esp,ebp
  176.     pop    ebp
  177.     ret
  178. v02_trans_128_0    endp
  179.  
  180.  
  181. ;int v02_trans_160_0()
  182.  
  183.     public    v02_trans_160_0
  184.     db    'v02_trans_160_0',15
  185. v02_trans_160_0    proc    near
  186.     push    ebp
  187. ;    mov    ebp,esp
  188.     push    esi
  189.     push    edi
  190.     push    ebx
  191.  
  192.     cld
  193.  
  194.     lea    ebx,ds:v02_digit_timing_flag0
  195.     mov    ecx,ds:v02_digit_counter
  196.     cmp    dword ptr [ecx*4][ebx],0
  197.     jne    #vd10
  198.     mov    eax,ds:v02_digit_wait
  199.     cmp    eax,VSYNC_counter
  200.     ja    #vd10
  201.     sub    VSYNC_counter,eax
  202.  
  203.     inc    dword ptr [ecx*4][ebx]
  204.     lea    ebx,ds:v02_digit_buf0
  205.     mov    edi,[ecx*4][ebx]    ; buf(圧縮画の入る所) -> edi
  206.     inc    ecx
  207.     cmp    ecx,8
  208.     jb    short #vd00
  209.     xor    ecx,ecx
  210. #vd00:    mov    ds:v02_digit_counter,ecx
  211.  
  212.     push    edi
  213.  
  214.     mov    edi,ds:v02_digit_work    ; work(原画の入る所) -> edi
  215.     mov    ax,10ch
  216.     mov    fs,ax
  217.     mov    esi,0
  218.     xor    ecx,ecx
  219.     mov    edx,120
  220. #vd01:    mov    cl,80            ; vram 転送
  221.     rep    movs dword ptr [edi],fs:[esi]
  222.     add    esi,1024*4-320
  223.     dec    edx
  224.     jne    short #vd01
  225.  
  226.     pop    edi
  227.  
  228.     mov    esi,ds:v02_digit_work    ; work(原画ある所) -> esi
  229.     mov    ebp,ds:v02_digit_ytab    ; Ytable -> ebx
  230.     xor    edx,edx
  231.     mov    ecx,160*120/8
  232. #vd04:    lodsd
  233.     mov    dx,ax
  234.     shr    eax,16
  235.     mov    dl,ds:[edx][ebp]
  236.     mov    dh,ds:[eax][ebp]
  237.     mov    bl,ds:[edx][ebp].32768
  238.     lodsd
  239.     mov    dx,ax
  240.     shr    eax,16
  241.     mov    dl,ds:[edx][ebp]
  242.     mov    dh,ds:[eax][ebp]
  243.     mov    bh,ds:[edx][ebp].32768
  244.  
  245.     shl    ebx,16
  246.  
  247.     lodsd
  248.     mov    dx,ax
  249.     shr    eax,16
  250.     mov    dl,ds:[edx][ebp]
  251.     mov    dh,ds:[eax][ebp]
  252.     mov    bl,ds:[edx][ebp].32768
  253.     lodsd
  254.     mov    dx,ax
  255.     shr    eax,16
  256.     mov    dl,ds:[edx][ebp]
  257.     mov    dh,ds:[eax][ebp]
  258.     mov    bh,ds:[edx][ebp].32768
  259.  
  260.     rol    ebx,16
  261.     mov    eax,ebx
  262.     stosd
  263.  
  264.     loop    #vd04
  265.  
  266.     mov    esi,ds:v02_digit_work    ; work(原画ある所) -> esi
  267.     mov    ebp,ds:v02_digit_ctab    ; Ctable -> ebx
  268.     mov    edx,120/2
  269. #vd08:    mov    ecx,160/8
  270. #vd09:    lodsd
  271.     and    eax,0000ffffh
  272.     mov    bl,ds:[eax][ebp]
  273.     lodsd
  274.     and    eax,0000ffffh
  275.     mov    bh,ds:[eax][ebp]
  276.  
  277.     shl    ebx,16
  278.  
  279.     lodsd
  280.     and    eax,0000ffffh
  281.     mov    bl,ds:[eax][ebp]
  282.     lodsd
  283.     and    eax,0000ffffh
  284.     mov    bh,ds:[eax][ebp]
  285.  
  286.     rol    ebx,16
  287.     mov    eax,ebx
  288.     stosd
  289.     loop    #vd09
  290.  
  291.     add    esi,160*2
  292.     dec    edx
  293.     jne    short #vd08
  294.  
  295. #vd10:    pop    ebx
  296.     pop    edi
  297.     pop    esi
  298. ;    mov    esp,ebp
  299.     pop    ebp
  300.     ret
  301. v02_trans_160_0    endp
  302.  
  303.  
  304. ;int v02_trans_192_0()
  305.  
  306.     public    v02_trans_192_0
  307.     db    'v02_trans_192_0',15
  308. v02_trans_192_0    proc    near
  309.     push    ebp
  310. ;    mov    ebp,esp
  311.     push    esi
  312.     push    edi
  313.     push    ebx
  314.  
  315.     cld
  316.  
  317.     lea    ebx,ds:v02_digit_timing_flag0
  318.     mov    ecx,ds:v02_digit_counter
  319.     cmp    dword ptr [ecx*4][ebx],0
  320.     jne    #vd10
  321.     mov    eax,ds:v02_digit_wait
  322.     cmp    eax,VSYNC_counter
  323.     ja    #vd10
  324.  
  325.     push    eax            ; 1994 4/10 追加
  326.     mov    al,30
  327.     mov    edx,0440h
  328.     out    dx,al
  329.     mov    edx,0442h
  330.     in    ax,dx
  331.     test    eax,0800h
  332.     pop    eax
  333.     je    #vd10
  334.  
  335.     sub    VSYNC_counter,eax
  336.  
  337.     inc    dword ptr [ecx*4][ebx]
  338.     lea    ebx,ds:v02_digit_buf0
  339.     mov    edi,[ecx*4][ebx]    ; buf(圧縮画の入る所) -> edi
  340.     inc    ecx
  341.     cmp    ecx,8
  342.     jb    short #vd00
  343.     xor    ecx,ecx
  344. #vd00:    mov    ds:v02_digit_counter,ecx
  345.  
  346.     push    edi
  347.  
  348.     mov    edi,ds:v02_digit_work    ; work(原画の入る所) -> edi
  349.     mov    ax,10ch
  350.     mov    fs,ax
  351.     mov    esi,128+1024*2*48
  352.     xor    ecx,ecx
  353.     mov    edx,144
  354. #vd01:    mov    cl,96            ; vram 転送
  355.     rep    movs dword ptr [edi],fs:[esi]
  356.     add    esi,1024*2-384
  357.     dec    edx
  358.     jne    short #vd01
  359.  
  360.     pop    edi
  361.  
  362.     mov    esi,ds:v02_digit_work    ; work(原画ある所) -> esi
  363.     mov    ebp,ds:v02_digit_ytab    ; Ytable -> ebx
  364.     xor    edx,edx
  365.     mov    ecx,192*144/8
  366. #vd04:    lodsd
  367.     mov    dx,ax
  368.     shr    eax,16
  369.     mov    dl,ds:[edx][ebp]
  370.     mov    dh,ds:[eax][ebp]
  371.     mov    bl,ds:[edx][ebp].32768
  372.     lodsd
  373.     mov    dx,ax
  374.     shr    eax,16
  375.     mov    dl,ds:[edx][ebp]
  376.     mov    dh,ds:[eax][ebp]
  377.     mov    bh,ds:[edx][ebp].32768
  378.  
  379.     shl    ebx,16
  380.  
  381.     lodsd
  382.     mov    dx,ax
  383.     shr    eax,16
  384.     mov    dl,ds:[edx][ebp]
  385.     mov    dh,ds:[eax][ebp]
  386.     mov    bl,ds:[edx][ebp].32768
  387.     lodsd
  388.     mov    dx,ax
  389.     shr    eax,16
  390.     mov    dl,ds:[edx][ebp]
  391.     mov    dh,ds:[eax][ebp]
  392.     mov    bh,ds:[edx][ebp].32768
  393.  
  394.     rol    ebx,16
  395.     mov    eax,ebx
  396.     stosd
  397.  
  398.     loop    #vd04
  399.  
  400.     mov    esi,ds:v02_digit_work    ; work(原画ある所) -> esi
  401.     mov    ebp,ds:v02_digit_ctab    ; Ctable -> ebx
  402.     mov    edx,144/2
  403. #vd08:    mov    ecx,192/8
  404. #vd09:    lodsd
  405.     and    eax,0000ffffh
  406.     mov    bl,ds:[eax][ebp]
  407.     lodsd
  408.     and    eax,0000ffffh
  409.     mov    bh,ds:[eax][ebp]
  410.  
  411.     shl    ebx,16
  412.  
  413.     lodsd
  414.     and    eax,0000ffffh
  415.     mov    bl,ds:[eax][ebp]
  416.     lodsd
  417.     and    eax,0000ffffh
  418.     mov    bh,ds:[eax][ebp]
  419.  
  420.     rol    ebx,16
  421.     mov    eax,ebx
  422.     stosd
  423.     loop    #vd09
  424.  
  425.     add    esi,192*2
  426.     dec    edx
  427.     jne    short #vd08
  428.  
  429. #vd10:    pop    ebx
  430.     pop    edi
  431.     pop    esi
  432. ;    mov    esp,ebp
  433.     pop    ebp
  434.     ret
  435. v02_trans_192_0    endp
  436.  
  437. ;int v02_trans_256_0()
  438.  
  439.     public    v02_trans_256_0
  440.     db    'v02_trans_256_0',15
  441. v02_trans_256_0    proc    near
  442.     push    ebp
  443. ;    mov    ebp,esp
  444.     push    esi
  445.     push    edi
  446.     push    ebx
  447.  
  448.     cld
  449.  
  450.     lea    ebx,ds:v02_digit_timing_flag0
  451.     mov    ecx,ds:v02_digit_counter
  452.     cmp    dword ptr [ecx*4][ebx],0
  453.     jne    #vd10
  454.     mov    eax,ds:v02_digit_wait
  455.     cmp    eax,VSYNC_counter
  456.     ja    #vd10
  457.  
  458.     push    eax            ; 1994 4/10 追加
  459.     mov    al,30
  460.     mov    edx,0440h
  461.     out    dx,al
  462.     mov    edx,0442h
  463.     in    ax,dx
  464.     test    eax,0800h
  465.     pop    eax
  466.     je    #vd10
  467.  
  468.     sub    VSYNC_counter,eax
  469.  
  470.     inc    dword ptr [ecx*4][ebx]
  471.     lea    ebx,ds:v02_digit_buf0
  472.     mov    edi,[ecx*4][ebx]    ; buf(圧縮画の入る所) -> edi
  473.     inc    ecx
  474.     cmp    ecx,8
  475.     jb    short #vd00
  476.     xor    ecx,ecx
  477. #vd00:    mov    ds:v02_digit_counter,ecx
  478.  
  479.     push    edi
  480.  
  481.     mov    edi,ds:v02_digit_work    ; work(原画の入る所) -> edi
  482.     mov    ax,10ch
  483.     mov    fs,ax
  484.     mov    esi,64+1024*2*24
  485.     xor    ecx,ecx
  486.     mov    edx,192
  487. #vd01:    mov    cl,128            ; vram 転送
  488.     rep    movs dword ptr [edi],fs:[esi]
  489.     add    esi,1024*2-512
  490.     dec    edx
  491.     jne    short #vd01
  492.  
  493.     pop    edi
  494.  
  495.     mov    esi,ds:v02_digit_work    ; work(原画ある所) -> esi
  496.     mov    ebp,ds:v02_digit_ytab    ; Ytable -> ebx
  497.     xor    edx,edx
  498.     mov    ecx,256*192/8
  499. #vd04:    lodsd
  500.     mov    dx,ax
  501.     shr    eax,16
  502.     mov    dl,ds:[edx][ebp]
  503.     mov    dh,ds:[eax][ebp]
  504.     mov    bl,ds:[edx][ebp].32768
  505.     lodsd
  506.     mov    dx,ax
  507.     shr    eax,16
  508.     mov    dl,ds:[edx][ebp]
  509.     mov    dh,ds:[eax][ebp]
  510.     mov    bh,ds:[edx][ebp].32768
  511.  
  512.     shl    ebx,16
  513.  
  514.     lodsd
  515.     mov    dx,ax
  516.     shr    eax,16
  517.     mov    dl,ds:[edx][ebp]
  518.     mov    dh,ds:[eax][ebp]
  519.     mov    bl,ds:[edx][ebp].32768
  520.     lodsd
  521.     mov    dx,ax
  522.     shr    eax,16
  523.     mov    dl,ds:[edx][ebp]
  524.     mov    dh,ds:[eax][ebp]
  525.     mov    bh,ds:[edx][ebp].32768
  526.  
  527.     rol    ebx,16
  528.     mov    eax,ebx
  529.     stosd
  530.  
  531.     loop    #vd04
  532.  
  533.     mov    esi,ds:v02_digit_work    ; work(原画ある所) -> esi
  534.     mov    ebp,ds:v02_digit_ctab    ; Ctable -> ebx
  535.     mov    edx,192/2
  536. #vd08:    mov    ecx,256/8
  537. #vd09:    lodsd
  538.     and    eax,0000ffffh
  539.     mov    bl,ds:[eax][ebp]
  540.     lodsd
  541.     and    eax,0000ffffh
  542.     mov    bh,ds:[eax][ebp]
  543.  
  544.     shl    ebx,16
  545.  
  546.     lodsd
  547.     and    eax,0000ffffh
  548.     mov    bl,ds:[eax][ebp]
  549.     lodsd
  550.     and    eax,0000ffffh
  551.     mov    bh,ds:[eax][ebp]
  552.  
  553.     rol    ebx,16
  554.     mov    eax,ebx
  555.     stosd
  556.     loop    #vd09
  557.  
  558.     add    esi,256*2
  559.     dec    edx
  560.     jne    short #vd08
  561.  
  562. #vd10:    pop    ebx
  563.     pop    edi
  564.     pop    esi
  565. ;    mov    esp,ebp
  566.     pop    ebp
  567.     ret
  568. v02_trans_256_0    endp
  569.  
  570. ;int v02_trans_320_0()
  571.  
  572.     public    v02_trans_320_0
  573.     db    'v02_trans_320_0',15
  574. v02_trans_320_0    proc    near
  575.     push    ebp
  576. ;    mov    ebp,esp
  577.     push    esi
  578.     push    edi
  579.     push    ebx
  580.  
  581.     cld
  582.  
  583.     lea    ebx,ds:v02_digit_timing_flag0
  584.     mov    ecx,ds:v02_digit_counter
  585.     cmp    dword ptr [ecx*4][ebx],0
  586.     jne    #vd10
  587.     mov    eax,ds:v02_digit_wait
  588.     cmp    eax,VSYNC_counter
  589.     ja    #vd10
  590.  
  591.     push    eax            ; 1994 4/10 追加
  592.     mov    al,30
  593.     mov    edx,0440h
  594.     out    dx,al
  595.     mov    edx,0442h
  596.     in    ax,dx
  597.     test    eax,0800h
  598.     pop    eax
  599.     je    #vd10
  600.  
  601.     sub    VSYNC_counter,eax
  602.  
  603.     inc    dword ptr [ecx*4][ebx]
  604.     lea    ebx,ds:v02_digit_buf0
  605.     mov    edi,[ecx*4][ebx]    ; buf(圧縮画の入る所) -> edi
  606.     inc    ecx
  607.     cmp    ecx,8
  608.     jb    short #vd00
  609.     xor    ecx,ecx
  610. #vd00:    mov    ds:v02_digit_counter,ecx
  611.  
  612.     push    edi
  613.  
  614.     mov    edi,ds:v02_digit_work    ; work(原画の入る所) -> edi
  615.     mov    ax,10ch
  616.     mov    fs,ax
  617.     mov    esi,0
  618.     xor    ecx,ecx
  619.     mov    edx,240
  620. #vd01:    mov    cl,160            ; vram 転送
  621.     rep    movs dword ptr [edi],fs:[esi]
  622.     add    esi,1024*2-640
  623.     dec    edx
  624.     jne    short #vd01
  625.  
  626.     pop    edi
  627.  
  628.     mov    esi,ds:v02_digit_work    ; work(原画ある所) -> esi
  629.     mov    ebp,ds:v02_digit_ytab    ; Ytable -> ebx
  630.     xor    edx,edx
  631.     mov    ecx,320*240/8
  632. #vd04:    lodsd
  633.     mov    dx,ax
  634.     shr    eax,16
  635.     mov    dl,ds:[edx][ebp]
  636.     mov    dh,ds:[eax][ebp]
  637.     mov    bl,ds:[edx][ebp].32768
  638.     lodsd
  639.     mov    dx,ax
  640.     shr    eax,16
  641.     mov    dl,ds:[edx][ebp]
  642.     mov    dh,ds:[eax][ebp]
  643.     mov    bh,ds:[edx][ebp].32768
  644.  
  645.     shl    ebx,16
  646.  
  647.     lodsd
  648.     mov    dx,ax
  649.     shr    eax,16
  650.     mov    dl,ds:[edx][ebp]
  651.     mov    dh,ds:[eax][ebp]
  652.     mov    bl,ds:[edx][ebp].32768
  653.     lodsd
  654.     mov    dx,ax
  655.     shr    eax,16
  656.     mov    dl,ds:[edx][ebp]
  657.     mov    dh,ds:[eax][ebp]
  658.     mov    bh,ds:[edx][ebp].32768
  659.  
  660.     rol    ebx,16
  661.     mov    eax,ebx
  662.     stosd
  663.  
  664.     loop    #vd04
  665.  
  666.     mov    esi,ds:v02_digit_work    ; work(原画ある所) -> esi
  667.     mov    ebp,ds:v02_digit_ctab    ; Ctable -> ebx
  668.     mov    edx,240/2
  669. #vd08:    mov    ecx,320/8
  670. #vd09:    lodsd
  671.     and    eax,0000ffffh
  672.     mov    bl,ds:[eax][ebp]
  673.     lodsd
  674.     and    eax,0000ffffh
  675.     mov    bh,ds:[eax][ebp]
  676.  
  677.     shl    ebx,16
  678.  
  679.     lodsd
  680.     and    eax,0000ffffh
  681.     mov    bl,ds:[eax][ebp]
  682.     lodsd
  683.     and    eax,0000ffffh
  684.     mov    bh,ds:[eax][ebp]
  685.  
  686.     rol    ebx,16
  687.     mov    eax,ebx
  688.     stosd
  689.     loop    #vd09
  690.  
  691.     add    esi,320*2
  692.     dec    edx
  693.     jne    short #vd08
  694.  
  695. #vd10:    pop    ebx
  696.     pop    edi
  697.     pop    esi
  698. ;    mov    esp,ebp
  699.     pop    ebp
  700.     ret
  701. v02_trans_320_0    endp
  702.  
  703.  
  704.  
  705.  
  706.  
  707. ;    オンメモリに同時録画・録音する関数
  708.  
  709. ;    引数用
  710. SND_BUF        equ     8
  711. SND_COUNTER    equ    12
  712. GRF_BUF        equ    16
  713. GRF_COUNTER    equ    20
  714. GRF_WAIT    equ    24
  715. COUNTER_START    equ    28
  716. Y_TABLE        equ    32
  717. C_TABLE        equ    36
  718. WK_AREA        equ    40
  719.  
  720. ;int v02_snd_trans_128_4( char *snd_buf, int snd_counter 
  721. ;              char *grf_buf, int grf_counter, int grf_wait
  722. ;              int count_start, 
  723. ;              char *table1, char *table2, char *work
  724. ;            )
  725. ;snd sampling freq=12000
  726.  
  727.     public    v02_snd_trans_128_4
  728.     db    'v02_snd_trans_128_4',19
  729. v02_snd_trans_128_4    proc    near
  730.     push    ebp
  731.     mov    ebp,esp
  732.     push    esi
  733.     push    edi
  734.     push    ebx
  735.  
  736.     push    eax        ; work
  737.  
  738.     cli                    ;Int disable
  739.     cld
  740.  
  741. #vdwt0:    mov    al,30        ; フィールドが1から0に変わる瞬間まで待つ
  742.     mov    edx,0440h    ; この瞬間からタイミングを考慮して
  743.     out    dx,al        ; 総合的にstart_countを決める必要がある
  744.     mov    edx,0442h
  745.     in    ax,dx
  746.     test    eax,0800h
  747.     je    #vdwt0
  748. #vdwt1:    mov    al,30
  749.     mov    edx,0440h
  750.     out    dx,al
  751.     mov    edx,0442h
  752.     in    ax,dx
  753.     test    eax,0800h
  754.     jne    #vdwt1
  755.  
  756.     mov    edi,[ebp].SND_BUF
  757.     mov    ecx,[ebp].SND_COUNTER
  758.     cmp    ecx,0
  759.     je    #vd_E
  760.  
  761.     mov    ax,10ch
  762.     mov    fs,ax
  763.     xor    eax,eax
  764.     xor    ebx,ebx
  765.  
  766. #vd000:    mov    edx,04e8h
  767.     in    al,dx
  768.     test    al,1
  769.     jne    short #vd001
  770.     call    v02_snd_128
  771.     jmp    short #vd000
  772. #vd001:    mov    edx,04e7h
  773.     in    al,dx
  774.     stosb
  775.     inc    dword ptr [ebp].COUNTER_START
  776.     dec    ecx
  777.     je    #vd_E
  778.  
  779. #vd010:    mov    edx,04e8h
  780.     in    al,dx
  781.     test    al,1
  782.     jne    short #vd011
  783.     call    v02_snd_128
  784.     jmp    short #vd010
  785. #vd011:    mov    edx,04e7h
  786.     in    al,dx
  787.     inc    dword ptr [ebp].COUNTER_START
  788.  
  789. #vd020:    mov    edx,04e8h
  790.     in    al,dx
  791.     test    al,1
  792.     jne    short #vd021
  793.     call    v02_snd_128
  794.     jmp    short #vd020
  795. #vd021:    mov    edx,04e7h
  796.     in    al,dx
  797.     stosb
  798.     inc    dword ptr [ebp].COUNTER_START
  799.     dec    ecx
  800.     je    #vd_E
  801.  
  802. #vd030:    mov    edx,04e8h
  803.     in    al,dx
  804.     test    al,1
  805.     jne    short #vd031
  806.     call    v02_snd_128
  807.     jmp    short #vd030
  808. #vd031:    mov    edx,04e7h
  809.     in    al,dx
  810.     mov    [esp],eax
  811.     inc    dword ptr [ebp].COUNTER_START
  812.  
  813. #vd040:    mov    edx,04e8h
  814.     in    al,dx
  815.     test    al,1
  816.     jne    short #vd041
  817.     call    v02_snd_128
  818.     jmp    short #vd040
  819. #vd041:    mov    edx,04e7h
  820.     in    al,dx
  821.     add    eax,[esp]
  822.     shr    eax,1
  823.     stosb
  824.     inc    dword ptr [ebp].COUNTER_START
  825.     dec    ecx
  826.     je    #vd_E
  827.  
  828. #vd050:    mov    edx,04e8h
  829.     in    al,dx
  830.     test    al,1
  831.     jne    short #vd051
  832.     call    v02_snd_128
  833.     jmp    short #vd050
  834. #vd051:    mov    edx,04e7h
  835.     in    al,dx
  836.     stosb
  837.     inc    dword ptr [ebp].COUNTER_START
  838.     dec    ecx
  839.     je    #vd_E
  840.  
  841. #vd060:    mov    edx,04e8h
  842.     in    al,dx
  843.     test    al,1
  844.     jne    short #vd061
  845.     call    v02_snd_128
  846.     jmp    short #vd060
  847. #vd061:    mov    edx,04e7h
  848.     in    al,dx
  849.     mov    [esp],eax
  850.     inc    dword ptr [ebp].COUNTER_START
  851.  
  852. #vd070:    mov    edx,04e8h
  853.     in    al,dx
  854.     test    al,1
  855.     jne    short #vd071
  856.     call    v02_snd_128
  857.     jmp    short #vd070
  858. #vd071:    mov    edx,04e7h
  859.     in    al,dx
  860.     add    eax,[esp]
  861.     shr    eax,1
  862.     stosb
  863.     inc    dword ptr [ebp].COUNTER_START
  864.     dec    ecx
  865.     je    #vd_E
  866.  
  867.     jmp    #vd000
  868.  
  869. #vd_E:    call    v02_snd_128
  870.     inc    dword ptr [ebp].COUNTER_START
  871.     cmp    dword ptr [ebp].GRF_COUNTER,0
  872.     jg    #vd_E
  873. #vd_E1:    call    v02_snd_128
  874.     inc    dword ptr [ebp].COUNTER_START
  875.     or    ebx,ebx
  876.     jne    #vd_E1
  877.  
  878.     sti
  879.  
  880.     pop    eax        ; work
  881.     xor    eax,eax
  882.     pop    ebx
  883.     pop    edi
  884.     pop    esi
  885.     mov    esp,ebp
  886.     pop    ebp
  887.     ret
  888. v02_snd_trans_128_4    endp
  889.  
  890. ;int v02_snd_trans_128_5( char *snd_buf, int snd_counter 
  891. ;              char *grf_buf, int grf_counter, int grf_wait
  892. ;              int count_start, 
  893. ;              char *table1, char *table2, char *work
  894. ;            )
  895. ;snd sampling freq=9600
  896.  
  897.     public    v02_snd_trans_128_5
  898.     db    'v02_snd_trans_128_5',19
  899. v02_snd_trans_128_5    proc    near
  900.     push    ebp
  901.     mov    ebp,esp
  902.     push    esi
  903.     push    edi
  904.     push    ebx
  905.  
  906.     push    eax        ; work
  907.  
  908.     cli                    ;Int disable
  909.     cld
  910.  
  911. #vdwt0:    mov    al,30        ; フィールドが1から0に変わる瞬間まで待つ
  912.     mov    edx,0440h    ; この瞬間からタイミングを考慮して
  913.     out    dx,al        ; 総合的にstart_countを決める必要がある
  914.     mov    edx,0442h
  915.     in    ax,dx
  916.     test    eax,0800h
  917.     je    #vdwt0
  918. #vdwt1:    mov    al,30
  919.     mov    edx,0440h
  920.     out    dx,al
  921.     mov    edx,0442h
  922.     in    ax,dx
  923.     test    eax,0800h
  924.     jne    #vdwt1
  925.  
  926.     mov    edi,[ebp].SND_BUF
  927.     mov    ecx,[ebp].SND_COUNTER
  928.     cmp    ecx,0
  929.     je    #vd_E
  930.  
  931.     mov    ax,10ch
  932.     mov    fs,ax
  933.     xor    eax,eax
  934.     xor    ebx,ebx
  935.  
  936. #vd000:    mov    edx,04e8h
  937.     in    al,dx
  938.     test    al,1
  939.     jne    short #vd001
  940.     call    v02_snd_128
  941.     jmp    short #vd000
  942. #vd001:    mov    edx,04e7h
  943.     in    al,dx
  944.     mov    [esp],eax
  945.     inc    dword ptr [ebp].COUNTER_START
  946.  
  947. #vd010:    mov    edx,04e8h
  948.     in    al,dx
  949.     test    al,1
  950.     jne    short #vd011
  951.     call    v02_snd_128
  952.     jmp    short #vd010
  953. #vd011:    mov    edx,04e7h
  954.     in    al,dx
  955.     add    eax,[esp]
  956.     shr    eax,1
  957.     stosb
  958.     inc    dword ptr [ebp].COUNTER_START
  959.     dec    ecx
  960.     je    #vd_E
  961.  
  962.     jmp    #vd000
  963.  
  964. #vd_E:    call    v02_snd_128
  965.     inc    dword ptr [ebp].COUNTER_START
  966.     cmp    dword ptr [ebp].GRF_COUNTER,0
  967.     jg    #vd_E
  968. #vd_E1:    call    v02_snd_128
  969.     inc    dword ptr [ebp].COUNTER_START
  970.     or    ebx,ebx
  971.     jne    #vd_E1
  972.  
  973.     sti
  974.  
  975.     pop    eax        ; work
  976.     xor    eax,eax
  977.     pop    ebx
  978.     pop    edi
  979.     pop    esi
  980.     mov    esp,ebp
  981.     pop    ebp
  982.     ret
  983. v02_snd_trans_128_5    endp
  984.  
  985. ;int v02_snd_trans_128_6( char *snd_buf, int snd_counter 
  986. ;              char *grf_buf, int grf_counter, int grf_wait
  987. ;              int count_start, 
  988. ;              char *table1, char *table2, char *work
  989. ;            )
  990. ;snd sampling freq=8000
  991.  
  992.     public    v02_snd_trans_128_6
  993.     db    'v02_snd_trans_128_6',19
  994. v02_snd_trans_128_6    proc    near
  995.     push    ebp
  996.     mov    ebp,esp
  997.     push    esi
  998.     push    edi
  999.     push    ebx
  1000.  
  1001.     push    eax        ; work
  1002.  
  1003.     cli                    ;Int disable
  1004.     cld
  1005.  
  1006. #vdwt0:    mov    al,30        ; フィールドが1から0に変わる瞬間まで待つ
  1007.     mov    edx,0440h    ; この瞬間からタイミングを考慮して
  1008.     out    dx,al        ; 総合的にstart_countを決める必要がある
  1009.     mov    edx,0442h
  1010.     in    ax,dx
  1011.     test    eax,0800h
  1012.     je    #vdwt0
  1013. #vdwt1:    mov    al,30
  1014.     mov    edx,0440h
  1015.     out    dx,al
  1016.     mov    edx,0442h
  1017.     in    ax,dx
  1018.     test    eax,0800h
  1019.     jne    #vdwt1
  1020.  
  1021.     mov    edi,[ebp].SND_BUF
  1022.     mov    ecx,[ebp].SND_COUNTER
  1023.     cmp    ecx,0
  1024.     je    #vd_E
  1025.  
  1026.     mov    ax,10ch
  1027.     mov    fs,ax
  1028.     xor    eax,eax
  1029.     xor    ebx,ebx
  1030.  
  1031. #vd000:    mov    edx,04e8h
  1032.     in    al,dx
  1033.     test    al,1
  1034.     jne    short #vd001
  1035.     call    v02_snd_128
  1036.     jmp    short #vd000
  1037. #vd001:    mov    edx,04e7h
  1038.     in    al,dx
  1039.     stosb
  1040.     inc    dword ptr [ebp].COUNTER_START
  1041.     dec    ecx
  1042.     je    #vd_E
  1043.  
  1044. #vd010:    mov    edx,04e8h
  1045.     in    al,dx
  1046.     test    al,1
  1047.     jne    short #vd011
  1048.     call    v02_snd_128
  1049.     jmp    short #vd010
  1050. #vd011:    mov    edx,04e7h
  1051.     in    al,dx
  1052.     inc    dword ptr [ebp].COUNTER_START
  1053.  
  1054. #vd020:    mov    edx,04e8h
  1055.     in    al,dx
  1056.     test    al,1
  1057.     jne    short #vd021
  1058.     call    v02_snd_128
  1059.     jmp    short #vd020
  1060. #vd021:    mov    edx,04e7h
  1061.     in    al,dx
  1062.     mov    [esp],eax
  1063.     inc    dword ptr [ebp].COUNTER_START
  1064.  
  1065. #vd030:    mov    edx,04e8h
  1066.     in    al,dx
  1067.     test    al,1
  1068.     jne    short #vd031
  1069.     call    v02_snd_128
  1070.     jmp    short #vd030
  1071. #vd031:    mov    edx,04e7h
  1072.     in    al,dx
  1073.     add    eax,[esp]
  1074.     shr    eax,1
  1075.     stosb
  1076.     inc    dword ptr [ebp].COUNTER_START
  1077.     dec    ecx
  1078.     je    #vd_E
  1079.  
  1080. #vd040:    mov    edx,04e8h
  1081.     in    al,dx
  1082.     test    al,1
  1083.     jne    short #vd041
  1084.     call    v02_snd_128
  1085.     jmp    short #vd040
  1086. #vd041:    mov    edx,04e7h
  1087.     in    al,dx
  1088.     inc    dword ptr [ebp].COUNTER_START
  1089.  
  1090. #vd050:    mov    edx,04e8h
  1091.     in    al,dx
  1092.     test    al,1
  1093.     jne    short #vd051
  1094.     call    v02_snd_128
  1095.     jmp    short #vd050
  1096. #vd051:    mov    edx,04e7h
  1097.     in    al,dx
  1098.     stosb
  1099.     inc    dword ptr [ebp].COUNTER_START
  1100.     dec    ecx
  1101.     je    #vd_E
  1102.  
  1103. #vd060:    mov    edx,04e8h
  1104.     in    al,dx
  1105.     test    al,1
  1106.     jne    short #vd061
  1107.     call    v02_snd_128
  1108.     jmp    short #vd060
  1109. #vd061:    mov    edx,04e7h
  1110.     in    al,dx
  1111.     inc    dword ptr [ebp].COUNTER_START
  1112.  
  1113. #vd070:    mov    edx,04e8h
  1114.     in    al,dx
  1115.     test    al,1
  1116.     jne    short #vd071
  1117.     call    v02_snd_128
  1118.     jmp    short #vd070
  1119. #vd071:    mov    edx,04e7h
  1120.     in    al,dx
  1121.     mov    [esp],eax
  1122.     inc    dword ptr [ebp].COUNTER_START
  1123.  
  1124. #vd080:    mov    edx,04e8h
  1125.     in    al,dx
  1126.     test    al,1
  1127.     jne    short #vd081
  1128.     call    v02_snd_128
  1129.     jmp    short #vd080
  1130. #vd081:    mov    edx,04e7h
  1131.     in    al,dx
  1132.     add    eax,[esp]
  1133.     shr    eax,1
  1134.     stosb
  1135.     inc    dword ptr [ebp].COUNTER_START
  1136.     dec    ecx
  1137.     je    #vd_E
  1138.  
  1139. #vd090:    mov    edx,04e8h
  1140.     in    al,dx
  1141.     test    al,1
  1142.     jne    short #vd091
  1143.     call    v02_snd_128
  1144.     jmp    short #vd090
  1145. #vd091:    mov    edx,04e7h
  1146.     in    al,dx
  1147.     inc    dword ptr [ebp].COUNTER_START
  1148.  
  1149. #vd100:    mov    edx,04e8h
  1150.     in    al,dx
  1151.     test    al,1
  1152.     jne    short #vd101
  1153.     call    v02_snd_128
  1154.     jmp    short #vd100
  1155. #vd101:    mov    edx,04e7h
  1156.     in    al,dx
  1157.     stosb
  1158.     inc    dword ptr [ebp].COUNTER_START
  1159.     dec    ecx
  1160.     je    #vd_E
  1161.  
  1162. #vd110:    mov    edx,04e8h
  1163.     in    al,dx
  1164.     test    al,1
  1165.     jne    short #vd111
  1166.     call    v02_snd_128
  1167.     jmp    short #vd110
  1168. #vd111:    mov    edx,04e7h
  1169.     in    al,dx
  1170.     inc    dword ptr [ebp].COUNTER_START
  1171.  
  1172.     jmp    #vd000
  1173.  
  1174. #vd_E:    call    v02_snd_128
  1175.     inc    dword ptr [ebp].COUNTER_START
  1176. #vd_Ea:    cmp    dword ptr [ebp].GRF_COUNTER,0
  1177.     jg    #vd_E
  1178. #vd_E1:    call    v02_snd_128
  1179.     inc    dword ptr [ebp].COUNTER_START
  1180. #vd_Eb:    or    ebx,ebx
  1181.     jne    #vd_E1
  1182.  
  1183.     sti
  1184.  
  1185.     pop    eax        ; work
  1186.     xor    eax,eax
  1187.     pop    ebx
  1188.     pop    edi
  1189.     pop    esi
  1190.     mov    esp,ebp
  1191.     pop    ebp
  1192.     ret
  1193. v02_snd_trans_128_6    endp
  1194.  
  1195. ;int v02_snd_trans_128_7( char *snd_buf, int snd_counter 
  1196. ;              char *grf_buf, int grf_counter, int grf_wait
  1197. ;              int count_start, 
  1198. ;              char *table1, char *table2, char *work
  1199. ;            )
  1200. ;snd sampling freq=6857
  1201.  
  1202.     public    v02_snd_trans_128_7
  1203.     db    'v02_snd_trans_128_7',19
  1204. v02_snd_trans_128_7    proc    near
  1205.     push    ebp
  1206.     mov    ebp,esp
  1207.     push    esi
  1208.     push    edi
  1209.     push    ebx
  1210.  
  1211.     push    eax        ; work
  1212.  
  1213.     cli                    ;Int disable
  1214.     cld
  1215.  
  1216. #vdwt0:    mov    al,30        ; フィールドが1から0に変わる瞬間まで待つ
  1217.     mov    edx,0440h    ; この瞬間からタイミングを考慮して
  1218.     out    dx,al        ; 総合的にstart_countを決める必要がある
  1219.     mov    edx,0442h
  1220.     in    ax,dx
  1221.     test    eax,0800h
  1222.     je    #vdwt0
  1223. #vdwt1:    mov    al,30
  1224.     mov    edx,0440h
  1225.     out    dx,al
  1226.     mov    edx,0442h
  1227.     in    ax,dx
  1228.     test    eax,0800h
  1229.     jne    #vdwt1
  1230.  
  1231.     mov    edi,[ebp].SND_BUF
  1232.     mov    ecx,[ebp].SND_COUNTER
  1233.     cmp    ecx,0
  1234.     je    #vd_E
  1235.  
  1236.     mov    ax,10ch
  1237.     mov    fs,ax
  1238.     xor    eax,eax
  1239.     xor    ebx,ebx
  1240.  
  1241. #vd000:    mov    edx,04e8h
  1242.     in    al,dx
  1243.     test    al,1
  1244.     jne    short #vd001
  1245.     call    v02_snd_128
  1246.     jmp    short #vd000
  1247. #vd001:    mov    edx,04e7h
  1248.     in    al,dx
  1249.     mov    [esp],eax
  1250.     inc    dword ptr [ebp].COUNTER_START
  1251.  
  1252. #vd010:    mov    edx,04e8h
  1253.     in    al,dx
  1254.     test    al,1
  1255.     jne    short #vd011
  1256.     call    v02_snd_128
  1257.     jmp    short #vd010
  1258. #vd011:    mov    edx,04e7h
  1259.     in    al,dx
  1260.     add    eax,[esp]
  1261.     shr    eax,1
  1262.     stosb
  1263.     inc    dword ptr [ebp].COUNTER_START
  1264.     dec    ecx
  1265.     je    #vd_E
  1266.  
  1267. #vd020:    mov    edx,04e8h
  1268.     in    al,dx
  1269.     test    al,1
  1270.     jne    short #vd021
  1271.     call    v02_snd_128
  1272.     jmp    short #vd020
  1273. #vd021:    mov    edx,04e7h
  1274.     in    al,dx
  1275.     inc    dword ptr [ebp].COUNTER_START
  1276.  
  1277. #vd030:    mov    edx,04e8h
  1278.     in    al,dx
  1279.     test    al,1
  1280.     jne    short #vd031
  1281.     call    v02_snd_128
  1282.     jmp    short #vd030
  1283. #vd031:    mov    edx,04e7h
  1284.     in    al,dx
  1285.     mov    [esp],eax
  1286.     inc    dword ptr [ebp].COUNTER_START
  1287.  
  1288. #vd040:    mov    edx,04e8h
  1289.     in    al,dx
  1290.     test    al,1
  1291.     jne    short #vd041
  1292.     call    v02_snd_128
  1293.     jmp    short #vd040
  1294. #vd041:    mov    edx,04e7h
  1295.     in    al,dx
  1296.     add    eax,[esp]
  1297.     shr    eax,1
  1298.     stosb
  1299.     inc    dword ptr [ebp].COUNTER_START
  1300.     dec    ecx
  1301.     je    #vd_E
  1302.  
  1303. #vd050:    mov    edx,04e8h
  1304.     in    al,dx
  1305.     test    al,1
  1306.     jne    short #vd051
  1307.     call    v02_snd_128
  1308.     jmp    short #vd050
  1309. #vd051:    mov    edx,04e7h
  1310.     in    al,dx
  1311.     inc    dword ptr [ebp].COUNTER_START
  1312.  
  1313. #vd060:    mov    edx,04e8h
  1314.     in    al,dx
  1315.     test    al,1
  1316.     jne    short #vd061
  1317.     call    v02_snd_128
  1318.     jmp    short #vd060
  1319. #vd061:    mov    edx,04e7h
  1320.     in    al,dx
  1321.     mov    [esp],eax
  1322.     inc    dword ptr [ebp].COUNTER_START
  1323.  
  1324. #vd070:    mov    edx,04e8h
  1325.     in    al,dx
  1326.     test    al,1
  1327.     jne    short #vd071
  1328.     call    v02_snd_128
  1329.     jmp    short #vd070
  1330. #vd071:    mov    edx,04e7h
  1331.     in    al,dx
  1332.     add    eax,[esp]
  1333.     shr    eax,1
  1334.     stosb
  1335.     inc    dword ptr [ebp].COUNTER_START
  1336.     dec    ecx
  1337.     je    #vd_E
  1338.  
  1339. #vd080:    mov    edx,04e8h
  1340.     in    al,dx
  1341.     test    al,1
  1342.     jne    short #vd081
  1343.     call    v02_snd_128
  1344.     jmp    short #vd080
  1345. #vd081:    mov    edx,04e7h
  1346.     in    al,dx
  1347.     inc    dword ptr [ebp].COUNTER_START
  1348.  
  1349. #vd090:    mov    edx,04e8h
  1350.     in    al,dx
  1351.     test    al,1
  1352.     jne    short #vd091
  1353.     call    v02_snd_128
  1354.     jmp    short #vd090
  1355. #vd091:    mov    edx,04e7h
  1356.     in    al,dx
  1357.     mov    [esp],eax
  1358.     inc    dword ptr [ebp].COUNTER_START
  1359.  
  1360. #vd100:    mov    edx,04e8h
  1361.     in    al,dx
  1362.     test    al,1
  1363.     jne    short #vd101
  1364.     call    v02_snd_128
  1365.     jmp    short #vd100
  1366. #vd101:    mov    edx,04e7h
  1367.     in    al,dx
  1368.     add    eax,[esp]
  1369.     shr    eax,1
  1370.     stosb
  1371.     inc    dword ptr [ebp].COUNTER_START
  1372.     dec    ecx
  1373.     je    #vd_E
  1374.  
  1375. #vd110:    mov    edx,04e8h
  1376.     in    al,dx
  1377.     test    al,1
  1378.     jne    short #vd111
  1379.     call    v02_snd_128
  1380.     jmp    short #vd110
  1381. #vd111:    mov    edx,04e7h
  1382.     in    al,dx
  1383.     inc    dword ptr [ebp].COUNTER_START
  1384.  
  1385. #vd120:    mov    edx,04e8h
  1386.     in    al,dx
  1387.     test    al,1
  1388.     jne    short #vd121
  1389.     call    v02_snd_128
  1390.     jmp    short #vd120
  1391. #vd121:    mov    edx,04e7h
  1392.     in    al,dx
  1393.     mov    [esp],eax
  1394.     inc    dword ptr [ebp].COUNTER_START
  1395.  
  1396. #vd130:    mov    edx,04e8h
  1397.     in    al,dx
  1398.     test    al,1
  1399.     jne    short #vd131
  1400.     call    v02_snd_128
  1401.     jmp    short #vd130
  1402. #vd131:    mov    edx,04e7h
  1403.     in    al,dx
  1404.     add    eax,[esp]
  1405.     shr    eax,1
  1406.     stosb
  1407.     inc    dword ptr [ebp].COUNTER_START
  1408.     dec    ecx
  1409.     je    #vd_E
  1410.  
  1411.     jmp    #vd000
  1412.  
  1413. #vd_E:    call    v02_snd_128
  1414.     inc    dword ptr [ebp].COUNTER_START
  1415.     cmp    dword ptr [ebp].GRF_COUNTER,0
  1416.     jg    #vd_E
  1417. #vd_E1:    call    v02_snd_128
  1418.     inc    dword ptr [ebp].COUNTER_START
  1419.     or    ebx,ebx
  1420.     jne    #vd_E1
  1421.  
  1422.     sti
  1423.  
  1424.     pop    eax        ; work
  1425.     xor    eax,eax
  1426.     pop    ebx
  1427.     pop    edi
  1428.     pop    esi
  1429.     mov    esp,ebp
  1430.     pop    ebp
  1431.     ret
  1432. v02_snd_trans_128_7    endp
  1433.  
  1434.  
  1435. ;
  1436. ;    ↓vram(128*96) trans
  1437. ;
  1438.  
  1439. DIV128_1    equ    2
  1440. DIV128_2    equ    2
  1441.  
  1442. v02_snd_128    proc    near
  1443.     push    eax
  1444.     push    ecx
  1445.     push    edi
  1446.     or    ebx,ebx
  1447.     jne    #vd01
  1448.  
  1449.     cmp    dword ptr [ebp].GRF_COUNTER,0
  1450.     jle    #vd10
  1451.     mov    eax,[ebp].GRF_WAIT
  1452.     cmp    eax,[ebp].COUNTER_START
  1453.     jg    #vd10
  1454.  
  1455.     push    eax
  1456.     mov    al,30
  1457.     mov    edx,0440h
  1458.     out    dx,al
  1459.     mov    edx,0442h
  1460.     in    ax,dx
  1461.     test    eax,0800h
  1462.     pop    eax
  1463.     je    #vd10
  1464.  
  1465.     sub    [ebp].COUNTER_START,eax
  1466.  
  1467.     mov    edi,[ebp].WK_AREA
  1468.     mov    esi,32+1024*4*12
  1469.     mov    ecx,64/DIV128_1            ; vram 転送
  1470.     rep    movs dword ptr [edi],fs:[esi]
  1471.     mov    ds:v02_digit_wk,edi
  1472.     dec    dword ptr [ebp].GRF_COUNTER
  1473.     inc    ebx
  1474.     jmp    #vd10
  1475.  
  1476. #vd01:    cmp    ebx,96*DIV128_1
  1477.     je    short #vd03
  1478.     ja    #vd05
  1479.     mov    edi,ds:v02_digit_wk
  1480.     mov    ecx,64/DIV128_1            ; vram 転送
  1481.     rep    movs dword ptr [edi],fs:[esi]
  1482.     mov    ds:v02_digit_wk,edi
  1483.     inc    ebx
  1484.     test    ebx,DIV128_1-1
  1485.     jne    #vd10
  1486.     add    esi,1024*4-256
  1487. #vd02:    jmp    #vd10
  1488.  
  1489. #vd03:    push    ebp
  1490.     push    ebx
  1491.     mov    edi,[ebp].GRF_BUF
  1492.     mov    esi,[ebp].WK_AREA
  1493.     mov    ebp,[ebp].Y_TABLE
  1494.     xor    edx,edx
  1495.     mov    ecx,16/DIV128_2
  1496. #vd04:    lodsd
  1497.     mov    dx,ax
  1498.     shr    eax,16
  1499.     mov    dl,ds:[edx][ebp]
  1500.     mov    dh,ds:[eax][ebp]
  1501.     mov    bl,ds:[edx][ebp].32768
  1502.     lodsd
  1503.     mov    dx,ax
  1504.     shr    eax,16
  1505.     mov    dl,ds:[edx][ebp]
  1506.     mov    dh,ds:[eax][ebp]
  1507.     mov    bh,ds:[edx][ebp].32768
  1508.  
  1509.     shl    ebx,16
  1510.  
  1511.     lodsd
  1512.     mov    dx,ax
  1513.     shr    eax,16
  1514.     mov    dl,ds:[edx][ebp]
  1515.     mov    dh,ds:[eax][ebp]
  1516.     mov    bl,ds:[edx][ebp].32768
  1517.     lodsd
  1518.     mov    dx,ax
  1519.     shr    eax,16
  1520.     mov    dl,ds:[edx][ebp]
  1521.     mov    dh,ds:[eax][ebp]
  1522.     mov    bh,ds:[edx][ebp].32768
  1523.  
  1524.     rol    ebx,16
  1525.     mov    eax,ebx
  1526.     stosd
  1527.     loop    #vd04
  1528.  
  1529.     pop    ebx
  1530.     pop    ebp
  1531.     mov    [ebp].GRF_BUF,edi
  1532.     inc    ebx
  1533.     jmp    #vd10
  1534.  
  1535. #vd05:    cmp    ebx,96*DIV128_1+96*DIV128_2
  1536.     je    short #vd07
  1537.     ja    short #vd08
  1538.     push    ebp
  1539.     push    ebx
  1540.     mov    edi,[ebp].GRF_BUF
  1541.     mov    ebp,[ebp].Y_TABLE
  1542.     xor    edx,edx
  1543.     mov    ecx,16/DIV128_2
  1544. #vd06:    lodsd
  1545.     mov    dx,ax
  1546.     shr    eax,16
  1547.     mov    dl,ds:[edx][ebp]
  1548.     mov    dh,ds:[eax][ebp]
  1549.     mov    bl,ds:[edx][ebp].32768
  1550.     lodsd
  1551.     mov    dx,ax
  1552.     shr    eax,16
  1553.     mov    dl,ds:[edx][ebp]
  1554.     mov    dh,ds:[eax][ebp]
  1555.     mov    bh,ds:[edx][ebp].32768
  1556.  
  1557.     shl    ebx,16
  1558.  
  1559.     lodsd
  1560.     mov    dx,ax
  1561.     shr    eax,16
  1562.     mov    dl,ds:[edx][ebp]
  1563.     mov    dh,ds:[eax][ebp]
  1564.     mov    bl,ds:[edx][ebp].32768
  1565.     lodsd
  1566.     mov    dx,ax
  1567.     shr    eax,16
  1568.     mov    dl,ds:[edx][ebp]
  1569.     mov    dh,ds:[eax][ebp]
  1570.     mov    bh,ds:[edx][ebp].32768
  1571.  
  1572.     rol    ebx,16
  1573.     mov    eax,ebx
  1574.     stosd
  1575.     loop    #vd06
  1576.  
  1577.     pop    ebx
  1578.     pop    ebp
  1579.     mov    [ebp].GRF_BUF,edi
  1580.     inc    ebx
  1581.     jmp    #vd10
  1582.  
  1583. #vd07:    mov    esi,[ebp].WK_AREA
  1584. #vd08:    push    ebp
  1585.     push    ebx
  1586.     mov    edi,[ebp].GRF_BUF
  1587.     mov    ebp,[ebp].C_TABLE
  1588.     mov    edx,0000ffffh
  1589.     mov    ecx,16/DIV128_2
  1590.  
  1591. #vd09:    lodsd
  1592.     and    eax,0000ffffh
  1593.     mov    bl,ds:[eax][ebp]
  1594.     lodsd
  1595.     and    eax,0000ffffh
  1596.     mov    bh,ds:[eax][ebp]
  1597.  
  1598.     shl    ebx,16
  1599.  
  1600.     lodsd
  1601.     and    eax,0000ffffh
  1602.     mov    bl,ds:[eax][ebp]
  1603.     lodsd
  1604.     and    eax,0000ffffh
  1605.     mov    bh,ds:[eax][ebp]
  1606.  
  1607.     rol    ebx,16
  1608.     mov    eax,ebx
  1609.     stosd
  1610.     loop    #vd09
  1611.  
  1612.     pop    ebx
  1613.     pop    ebp
  1614.     mov    [ebp].GRF_BUF,edi
  1615.     inc    ebx
  1616.     test    ebx,DIV128_2-1
  1617.     jne    short #vd0A
  1618.     add    esi,128*2
  1619. #vd0A:    cmp    ebx,96*DIV128_1+96*DIV128_2+48*DIV128_2
  1620.     jne    short #vd10
  1621.     xor    ebx,ebx
  1622.  
  1623. #vd10:    pop    edi
  1624.     pop    ecx
  1625.     pop    eax
  1626.     ret
  1627. v02_snd_128    endp
  1628.  
  1629. ;
  1630. ;    ↑vram(128*96) trans
  1631. ;
  1632.  
  1633. ;    v02用ルーチン
  1634. ;int v02_trans_128_9600( char *snd_buf, int snd_counter 
  1635. ;              char *grf_buf, int grf_counter, int grf_wait
  1636. ;              int count_start, 
  1637. ;              char *table1, char *table2, char *work
  1638. ;            )
  1639. ;snd sampling freq=9600
  1640.  
  1641.     public    v02_trans_128_9600
  1642.     db    'v02_trans_128_9600',18
  1643. v02_trans_128_9600    proc    near
  1644.     push    ebp
  1645.     mov    ebp,esp
  1646.     push    esi
  1647.     push    edi
  1648.     push    ebx
  1649.  
  1650.     push    eax        ; work
  1651.  
  1652.     cli                    ;Int disable
  1653.     cld
  1654.  
  1655. #vdwt0:    mov    al,30        ; フィールドが1から0に変わる瞬間まで待つ
  1656.     mov    edx,0440h    ; この瞬間からタイミングを考慮して
  1657.     out    dx,al        ; 総合的にstart_countを決める必要がある
  1658.     mov    edx,0442h
  1659.     in    ax,dx
  1660.     test    eax,0800h
  1661.     je    #vdwt0
  1662. #vdwt1:    mov    al,30
  1663.     mov    edx,0440h
  1664.     out    dx,al
  1665.     mov    edx,0442h
  1666.     in    ax,dx
  1667.     test    eax,0800h
  1668.     jne    #vdwt1
  1669.  
  1670.     mov    edi,[ebp].SND_BUF
  1671.     mov    ecx,[ebp].SND_COUNTER
  1672.     cmp    ecx,0
  1673.     je    #vd_E
  1674.  
  1675.     mov    ax,10ch
  1676.     mov    fs,ax
  1677.     xor    eax,eax
  1678.     xor    ebx,ebx
  1679.  
  1680. #vd000:    mov    edx,04e8h
  1681.     in    al,dx
  1682.     test    al,1
  1683.     jne    short #vd001
  1684.     call    v02_snd_128
  1685.     jmp    short #vd000
  1686. #vd001:    mov    edx,04e7h
  1687.     in    al,dx
  1688.     mov    [esp],eax
  1689.     inc    dword ptr [ebp].COUNTER_START
  1690.  
  1691. #vd010:    mov    edx,04e8h
  1692.     in    al,dx
  1693.     test    al,1
  1694.     jne    short #vd011
  1695.     call    v02_snd_128
  1696.     jmp    short #vd010
  1697. #vd011:    mov    edx,04e7h
  1698.     in    al,dx
  1699.     add    eax,[esp]
  1700.     shr    eax,1
  1701.     stosb
  1702.     inc    dword ptr [ebp].COUNTER_START
  1703.     dec    ecx
  1704.     je    #vd_E
  1705.  
  1706.     jmp    #vd000
  1707.  
  1708. #vd_E:    call    v02_snd_128
  1709.     inc    dword ptr [ebp].COUNTER_START
  1710.     cmp    dword ptr [ebp].GRF_COUNTER,0
  1711.     jg    #vd_E
  1712. #vd_E1:    call    v02_snd_128
  1713.     inc    dword ptr [ebp].COUNTER_START
  1714.     or    ebx,ebx
  1715.     jne    #vd_E1
  1716.  
  1717.     sti
  1718.  
  1719.     pop    eax        ; work
  1720.     xor    eax,eax
  1721.     pop    ebx
  1722.     pop    edi
  1723.     pop    esi
  1724.     mov    esp,ebp
  1725.     pop    ebp
  1726.     ret
  1727. v02_trans_128_9600    endp
  1728.  
  1729. ;    v02用ルーチン
  1730. ;int v02_trans_128_19200( char *snd_buf, int snd_counter 
  1731. ;              char *grf_buf, int grf_counter, int grf_wait
  1732. ;              int count_start, 
  1733. ;              char *table1, char *table2, char *work
  1734. ;            )
  1735. ;snd sampling freq=19200
  1736.  
  1737.     public    v02_trans_128_19200
  1738.     db    'v02_trans_128_19200',19
  1739. v02_trans_128_19200    proc    near
  1740.     push    ebp
  1741.     mov    ebp,esp
  1742.     push    esi
  1743.     push    edi
  1744.     push    ebx
  1745.  
  1746.     cli                    ;Int disable
  1747.     cld
  1748.  
  1749. #vdwt0:    mov    al,30        ; フィールドが1から0に変わる瞬間まで待つ
  1750.     mov    edx,0440h    ; この瞬間からタイミングを考慮して
  1751.     out    dx,al        ; 総合的にstart_countを決める必要がある
  1752.     mov    edx,0442h
  1753.     in    ax,dx
  1754.     test    eax,0800h
  1755.     je    #vdwt0
  1756. #vdwt1:    mov    al,30
  1757.     mov    edx,0440h
  1758.     out    dx,al
  1759.     mov    edx,0442h
  1760.     in    ax,dx
  1761.     test    eax,0800h
  1762.     jne    #vdwt1
  1763.  
  1764.     mov    edi,[ebp].SND_BUF
  1765.     mov    ecx,[ebp].SND_COUNTER
  1766.     cmp    ecx,0
  1767.     je    #vd_E
  1768.  
  1769.     mov    ax,10ch
  1770.     mov    fs,ax
  1771.     xor    eax,eax
  1772.     xor    ebx,ebx
  1773.  
  1774. #vd000:    mov    edx,04e8h
  1775.     in    al,dx
  1776.     test    al,1
  1777.     jne    short #vd001
  1778.     call    v02_snd_128
  1779.     jmp    short #vd000
  1780. #vd001:    mov    edx,04e7h
  1781.     in    al,dx
  1782.     stosb
  1783.     inc    dword ptr [ebp].COUNTER_START
  1784.     dec    ecx
  1785.     jne    #vd000
  1786.  
  1787. #vd_E:    call    v02_snd_128
  1788.     inc    dword ptr [ebp].COUNTER_START
  1789.     cmp    dword ptr [ebp].GRF_COUNTER,0
  1790.     jg    #vd_E
  1791. #vd_E1:    call    v02_snd_128
  1792.     inc    dword ptr [ebp].COUNTER_START
  1793.     or    ebx,ebx
  1794.     jne    #vd_E1
  1795.  
  1796.     sti
  1797.  
  1798.     xor    eax,eax
  1799.     pop    ebx
  1800.     pop    edi
  1801.     pop    esi
  1802.     mov    esp,ebp
  1803.     pop    ebp
  1804.     ret
  1805. v02_trans_128_19200    endp
  1806.  
  1807.  
  1808.  
  1809.  
  1810. ;int v02_snd_trans_160_4( char *snd_buf, int snd_counter 
  1811. ;              char *grf_buf, int grf_counter, int grf_wait
  1812. ;              int count_start, 
  1813. ;              char *table1, char *table2, char *work
  1814. ;            )
  1815. ;snd sampling freq=12000
  1816.  
  1817.     public    v02_snd_trans_160_4
  1818.     db    'v02_snd_trans_160_4',19
  1819. v02_snd_trans_160_4    proc    near
  1820.     push    ebp
  1821.     mov    ebp,esp
  1822.     push    esi
  1823.     push    edi
  1824.     push    ebx
  1825.  
  1826.     push    eax        ; work
  1827.  
  1828.     cli                    ;Int disable
  1829.     cld
  1830.  
  1831. #vdwt0:    mov    al,30        ; フィールドが1から0に変わる瞬間まで待つ
  1832.     mov    edx,0440h    ; この瞬間からタイミングを考慮して
  1833.     out    dx,al        ; 総合的にstart_countを決める必要がある
  1834.     mov    edx,0442h
  1835.     in    ax,dx
  1836.     test    eax,0800h
  1837.     je    #vdwt0
  1838. #vdwt1:    mov    al,30
  1839.     mov    edx,0440h
  1840.     out    dx,al
  1841.     mov    edx,0442h
  1842.     in    ax,dx
  1843.     test    eax,0800h
  1844.     jne    #vdwt1
  1845.  
  1846.     mov    edi,[ebp].SND_BUF
  1847.     mov    ecx,[ebp].SND_COUNTER
  1848.     cmp    ecx,0
  1849.     je    #vd_E
  1850.  
  1851.     mov    ax,10ch
  1852.     mov    fs,ax
  1853.     xor    eax,eax
  1854.     xor    ebx,ebx
  1855.  
  1856. #vd000:    mov    edx,04e8h
  1857.     in    al,dx
  1858.     test    al,1
  1859.     jne    short #vd001
  1860.     call    v02_snd_160
  1861.     jmp    short #vd000
  1862. #vd001:    mov    edx,04e7h
  1863.     in    al,dx
  1864.     stosb
  1865.     inc    dword ptr [ebp].COUNTER_START
  1866.     dec    ecx
  1867.     je    #vd_E
  1868.  
  1869. #vd010:    mov    edx,04e8h
  1870.     in    al,dx
  1871.     test    al,1
  1872.     jne    short #vd011
  1873.     call    v02_snd_160
  1874.     jmp    short #vd010
  1875. #vd011:    mov    edx,04e7h
  1876.     in    al,dx
  1877.     inc    dword ptr [ebp].COUNTER_START
  1878.  
  1879. #vd020:    mov    edx,04e8h
  1880.     in    al,dx
  1881.     test    al,1
  1882.     jne    short #vd021
  1883.     call    v02_snd_160
  1884.     jmp    short #vd020
  1885. #vd021:    mov    edx,04e7h
  1886.     in    al,dx
  1887.     stosb
  1888.     inc    dword ptr [ebp].COUNTER_START
  1889.     dec    ecx
  1890.     je    #vd_E
  1891.  
  1892. #vd030:    mov    edx,04e8h
  1893.     in    al,dx
  1894.     test    al,1
  1895.     jne    short #vd031
  1896.     call    v02_snd_160
  1897.     jmp    short #vd030
  1898. #vd031:    mov    edx,04e7h
  1899.     in    al,dx
  1900.     mov    [esp],eax
  1901.     inc    dword ptr [ebp].COUNTER_START
  1902.  
  1903. #vd040:    mov    edx,04e8h
  1904.     in    al,dx
  1905.     test    al,1
  1906.     jne    short #vd041
  1907.     call    v02_snd_160
  1908.     jmp    short #vd040
  1909. #vd041:    mov    edx,04e7h
  1910.     in    al,dx
  1911.     add    eax,[esp]
  1912.     shr    eax,1
  1913.     stosb
  1914.     inc    dword ptr [ebp].COUNTER_START
  1915.     dec    ecx
  1916.     je    #vd_E
  1917.  
  1918. #vd050:    mov    edx,04e8h
  1919.     in    al,dx
  1920.     test    al,1
  1921.     jne    short #vd051
  1922.     call    v02_snd_160
  1923.     jmp    short #vd050
  1924. #vd051:    mov    edx,04e7h
  1925.     in    al,dx
  1926.     stosb
  1927.     inc    dword ptr [ebp].COUNTER_START
  1928.     dec    ecx
  1929.     je    #vd_E
  1930.  
  1931. #vd060:    mov    edx,04e8h
  1932.     in    al,dx
  1933.     test    al,1
  1934.     jne    short #vd061
  1935.     call    v02_snd_160
  1936.     jmp    short #vd060
  1937. #vd061:    mov    edx,04e7h
  1938.     in    al,dx
  1939.     mov    [esp],eax
  1940.     inc    dword ptr [ebp].COUNTER_START
  1941.  
  1942. #vd070:    mov    edx,04e8h
  1943.     in    al,dx
  1944.     test    al,1
  1945.     jne    short #vd071
  1946.     call    v02_snd_160
  1947.     jmp    short #vd070
  1948. #vd071:    mov    edx,04e7h
  1949.     in    al,dx
  1950.     add    eax,[esp]
  1951.     shr    eax,1
  1952.     stosb
  1953.     inc    dword ptr [ebp].COUNTER_START
  1954.     dec    ecx
  1955.     je    #vd_E
  1956.  
  1957.     jmp    #vd000
  1958.  
  1959. #vd_E:    call    v02_snd_160
  1960.     inc    dword ptr [ebp].COUNTER_START
  1961.     cmp    dword ptr [ebp].GRF_COUNTER,0
  1962.     jg    #vd_E
  1963. #vd_E1:    call    v02_snd_160
  1964.     inc    dword ptr [ebp].COUNTER_START
  1965.     or    ebx,ebx
  1966.     jne    #vd_E1
  1967.  
  1968.     sti
  1969.  
  1970.     pop    eax        ; work
  1971.     xor    eax,eax
  1972.     pop    ebx
  1973.     pop    edi
  1974.     pop    esi
  1975.     mov    esp,ebp
  1976.     pop    ebp
  1977.     ret
  1978. v02_snd_trans_160_4    endp
  1979.  
  1980. ;int v02_snd_trans_160_5( char *snd_buf, int snd_counter 
  1981. ;              char *grf_buf, int grf_counter, int grf_wait
  1982. ;              int count_start, 
  1983. ;              char *table1, char *table2, char *work
  1984. ;            )
  1985. ;snd sampling freq=9600
  1986.  
  1987.     public    v02_snd_trans_160_5
  1988.     db    'v02_snd_trans_160_5',19
  1989. v02_snd_trans_160_5    proc    near
  1990.     push    ebp
  1991.     mov    ebp,esp
  1992.     push    esi
  1993.     push    edi
  1994.     push    ebx
  1995.  
  1996.     push    eax        ; work
  1997.  
  1998.     cli                    ;Int disable
  1999.     cld
  2000.  
  2001. #vdwt0:    mov    al,30        ; フィールドが1から0に変わる瞬間まで待つ
  2002.     mov    edx,0440h    ; この瞬間からタイミングを考慮して
  2003.     out    dx,al        ; 総合的にstart_countを決める必要がある
  2004.     mov    edx,0442h
  2005.     in    ax,dx
  2006.     test    eax,0800h
  2007.     je    #vdwt0
  2008. #vdwt1:    mov    al,30
  2009.     mov    edx,0440h
  2010.     out    dx,al
  2011.     mov    edx,0442h
  2012.     in    ax,dx
  2013.     test    eax,0800h
  2014.     jne    #vdwt1
  2015.  
  2016.     mov    edi,[ebp].SND_BUF
  2017.     mov    ecx,[ebp].SND_COUNTER
  2018.     cmp    ecx,0
  2019.     je    #vd_E
  2020.  
  2021.     mov    ax,10ch
  2022.     mov    fs,ax
  2023.     xor    eax,eax
  2024.     xor    ebx,ebx
  2025.  
  2026. #vd000:    mov    edx,04e8h
  2027.     in    al,dx
  2028.     test    al,1
  2029.     jne    short #vd001
  2030.     call    v02_snd_160
  2031.     jmp    short #vd000
  2032. #vd001:    mov    edx,04e7h
  2033.     in    al,dx
  2034.     mov    [esp],eax
  2035.     inc    dword ptr [ebp].COUNTER_START
  2036.  
  2037. #vd010:    mov    edx,04e8h
  2038.     in    al,dx
  2039.     test    al,1
  2040.     jne    short #vd011
  2041.     call    v02_snd_160
  2042.     jmp    short #vd010
  2043. #vd011:    mov    edx,04e7h
  2044.     in    al,dx
  2045.     add    eax,[esp]
  2046.     shr    eax,1
  2047.     stosb
  2048.     inc    dword ptr [ebp].COUNTER_START
  2049.     dec    ecx
  2050.     je    #vd_E
  2051.  
  2052.     jmp    #vd000
  2053.  
  2054. #vd_E:    call    v02_snd_160
  2055.     inc    dword ptr [ebp].COUNTER_START
  2056.     cmp    dword ptr [ebp].GRF_COUNTER,0
  2057.     jg    #vd_E
  2058. #vd_E1:    call    v02_snd_160
  2059.     inc    dword ptr [ebp].COUNTER_START
  2060.     or    ebx,ebx
  2061.     jne    #vd_E1
  2062.  
  2063.     sti
  2064.  
  2065.     pop    eax        ; work
  2066.     xor    eax,eax
  2067.     pop    ebx
  2068.     pop    edi
  2069.     pop    esi
  2070.     mov    esp,ebp
  2071.     pop    ebp
  2072.     ret
  2073. v02_snd_trans_160_5    endp
  2074.  
  2075. ;int v02_snd_trans_160_6( char *snd_buf, int snd_counter,
  2076. ;              char *grf_buf, int grf_counter, int grf_wait
  2077. ;              int count_start, 
  2078. ;              char *table1, char *table2, char *work
  2079. ;            )
  2080. ;snd sampling freq=8000
  2081.  
  2082.     public    v02_snd_trans_160_6
  2083.     db    'v02_snd_trans_160_6',19
  2084. v02_snd_trans_160_6    proc    near
  2085.     push    ebp
  2086.     mov    ebp,esp
  2087.     push    esi
  2088.     push    edi
  2089.     push    ebx
  2090.  
  2091.     push    eax        ; work
  2092.  
  2093.     cli                    ;Int disable
  2094.     cld
  2095.  
  2096. #vdwt0:    mov    al,30        ; フィールドが1から0に変わる瞬間まで待つ
  2097.     mov    edx,0440h    ; この瞬間からタイミングを考慮して
  2098.     out    dx,al        ; 総合的にstart_countを決める必要がある
  2099.     mov    edx,0442h
  2100.     in    ax,dx
  2101.     test    eax,0800h
  2102.     je    #vdwt0
  2103. #vdwt1:    mov    al,30
  2104.     mov    edx,0440h
  2105.     out    dx,al
  2106.     mov    edx,0442h
  2107.     in    ax,dx
  2108.     test    eax,0800h
  2109.     jne    #vdwt1
  2110.  
  2111.     mov    edi,[ebp].SND_BUF
  2112.     mov    ecx,[ebp].SND_COUNTER
  2113.     cmp    ecx,0
  2114.     je    #vd_E
  2115.  
  2116.     mov    ax,10ch
  2117.     mov    fs,ax
  2118.     xor    eax,eax
  2119.     xor    ebx,ebx
  2120.  
  2121. #vd000:    mov    edx,04e8h
  2122.     in    al,dx
  2123.     test    al,1
  2124.     jne    short #vd001
  2125.     call    v02_snd_160
  2126.     jmp    short #vd000
  2127. #vd001:    mov    edx,04e7h
  2128.     in    al,dx
  2129.     stosb
  2130.     inc    dword ptr [ebp].COUNTER_START
  2131.     dec    ecx
  2132.     je    #vd_E
  2133.  
  2134. #vd010:    mov    edx,04e8h
  2135.     in    al,dx
  2136.     test    al,1
  2137.     jne    short #vd011
  2138.     call    v02_snd_160
  2139.     jmp    short #vd010
  2140. #vd011:    mov    edx,04e7h
  2141.     in    al,dx
  2142.     inc    dword ptr [ebp].COUNTER_START
  2143.  
  2144. #vd020:    mov    edx,04e8h
  2145.     in    al,dx
  2146.     test    al,1
  2147.     jne    short #vd021
  2148.     call    v02_snd_160
  2149.     jmp    short #vd020
  2150. #vd021:    mov    edx,04e7h
  2151.     in    al,dx
  2152.     mov    [esp],eax
  2153.     inc    dword ptr [ebp].COUNTER_START
  2154.  
  2155. #vd030:    mov    edx,04e8h
  2156.     in    al,dx
  2157.     test    al,1
  2158.     jne    short #vd031
  2159.     call    v02_snd_160
  2160.     jmp    short #vd030
  2161. #vd031:    mov    edx,04e7h
  2162.     in    al,dx
  2163.     add    eax,[esp]
  2164.     shr    eax,1
  2165.     stosb
  2166.     inc    dword ptr [ebp].COUNTER_START
  2167.     dec    ecx
  2168.     je    #vd_E
  2169.  
  2170. #vd040:    mov    edx,04e8h
  2171.     in    al,dx
  2172.     test    al,1
  2173.     jne    short #vd041
  2174.     call    v02_snd_160
  2175.     jmp    short #vd040
  2176. #vd041:    mov    edx,04e7h
  2177.     in    al,dx
  2178.     inc    dword ptr [ebp].COUNTER_START
  2179.  
  2180. #vd050:    mov    edx,04e8h
  2181.     in    al,dx
  2182.     test    al,1
  2183.     jne    short #vd051
  2184.     call    v02_snd_160
  2185.     jmp    short #vd050
  2186. #vd051:    mov    edx,04e7h
  2187.     in    al,dx
  2188.     stosb
  2189.     inc    dword ptr [ebp].COUNTER_START
  2190.     dec    ecx
  2191.     je    #vd_E
  2192.  
  2193. #vd060:    mov    edx,04e8h
  2194.     in    al,dx
  2195.     test    al,1
  2196.     jne    short #vd061
  2197.     call    v02_snd_160
  2198.     jmp    short #vd060
  2199. #vd061:    mov    edx,04e7h
  2200.     in    al,dx
  2201.     inc    dword ptr [ebp].COUNTER_START
  2202.  
  2203. #vd070:    mov    edx,04e8h
  2204.     in    al,dx
  2205.     test    al,1
  2206.     jne    short #vd071
  2207.     call    v02_snd_160
  2208.     jmp    short #vd070
  2209. #vd071:    mov    edx,04e7h
  2210.     in    al,dx
  2211.     mov    [esp],eax
  2212.     inc    dword ptr [ebp].COUNTER_START
  2213.  
  2214. #vd080:    mov    edx,04e8h
  2215.     in    al,dx
  2216.     test    al,1
  2217.     jne    short #vd081
  2218.     call    v02_snd_160
  2219.     jmp    short #vd080
  2220. #vd081:    mov    edx,04e7h
  2221.     in    al,dx
  2222.     add    eax,[esp]
  2223.     shr    eax,1
  2224.     stosb
  2225.     inc    dword ptr [ebp].COUNTER_START
  2226.     dec    ecx
  2227.     je    #vd_E
  2228.  
  2229. #vd090:    mov    edx,04e8h
  2230.     in    al,dx
  2231.     test    al,1
  2232.     jne    short #vd091
  2233.     call    v02_snd_160
  2234.     jmp    short #vd090
  2235. #vd091:    mov    edx,04e7h
  2236.     in    al,dx
  2237.     inc    dword ptr [ebp].COUNTER_START
  2238.  
  2239. #vd100:    mov    edx,04e8h
  2240.     in    al,dx
  2241.     test    al,1
  2242.     jne    short #vd101
  2243.     call    v02_snd_160
  2244.     jmp    short #vd100
  2245. #vd101:    mov    edx,04e7h
  2246.     in    al,dx
  2247.     stosb
  2248.     inc    dword ptr [ebp].COUNTER_START
  2249.     dec    ecx
  2250.     je    #vd_E
  2251.  
  2252. #vd110:    mov    edx,04e8h
  2253.     in    al,dx
  2254.     test    al,1
  2255.     jne    short #vd111
  2256.     call    v02_snd_160
  2257.     jmp    short #vd110
  2258. #vd111:    mov    edx,04e7h
  2259.     in    al,dx
  2260.     inc    dword ptr [ebp].COUNTER_START
  2261.  
  2262.     jmp    #vd000
  2263.  
  2264. #vd_E:    call    v02_snd_160
  2265.     inc    dword ptr [ebp].COUNTER_START
  2266.     cmp    dword ptr [ebp].GRF_COUNTER,0
  2267.     jg    #vd_E
  2268. #vd_E1:    call    v02_snd_160
  2269.     inc    dword ptr [ebp].COUNTER_START
  2270.     or    ebx,ebx
  2271.     jne    #vd_E1
  2272.  
  2273.     sti                    ;interrupt enable
  2274.  
  2275.     pop    eax        ; work
  2276.     xor    eax,eax
  2277.     pop    ebx
  2278.     pop    edi
  2279.     pop    esi
  2280.     mov    esp,ebp
  2281.     pop    ebp
  2282.     ret
  2283. v02_snd_trans_160_6    endp
  2284.  
  2285. ;int v02_snd_trans_160_7( char *snd_buf, int snd_counter 
  2286. ;              char *grf_buf, int grf_counter, int grf_wait
  2287. ;              int count_start, 
  2288. ;              char *table1, char *table2, char *work
  2289. ;            )
  2290. ;snd sampling freq=6857
  2291.  
  2292.     public    v02_snd_trans_160_7
  2293.     db    'v02_snd_trans_160_7',19
  2294. v02_snd_trans_160_7    proc    near
  2295.     push    ebp
  2296.     mov    ebp,esp
  2297.     push    esi
  2298.     push    edi
  2299.     push    ebx
  2300.  
  2301.     push    eax        ; work
  2302.  
  2303.     cli                    ;Int disable
  2304.     cld
  2305.  
  2306. #vdwt0:    mov    al,30        ; フィールドが1から0に変わる瞬間まで待つ
  2307.     mov    edx,0440h    ; この瞬間からタイミングを考慮して
  2308.     out    dx,al        ; 総合的にstart_countを決める必要がある
  2309.     mov    edx,0442h
  2310.     in    ax,dx
  2311.     test    eax,0800h
  2312.     je    #vdwt0
  2313. #vdwt1:    mov    al,30
  2314.     mov    edx,0440h
  2315.     out    dx,al
  2316.     mov    edx,0442h
  2317.     in    ax,dx
  2318.     test    eax,0800h
  2319.     jne    #vdwt1
  2320.  
  2321.     mov    edi,[ebp].SND_BUF
  2322.     mov    ecx,[ebp].SND_COUNTER
  2323.     cmp    ecx,0
  2324.     je    #vd_E
  2325.  
  2326.     mov    ax,10ch
  2327.     mov    fs,ax
  2328.     xor    eax,eax
  2329.     xor    ebx,ebx
  2330.  
  2331. #vd000:    mov    edx,04e8h
  2332.     in    al,dx
  2333.     test    al,1
  2334.     jne    short #vd001
  2335.     call    v02_snd_160
  2336.     jmp    short #vd000
  2337. #vd001:    mov    edx,04e7h
  2338.     in    al,dx
  2339.     mov    [esp],eax
  2340.     inc    dword ptr [ebp].COUNTER_START
  2341.  
  2342. #vd010:    mov    edx,04e8h
  2343.     in    al,dx
  2344.     test    al,1
  2345.     jne    short #vd011
  2346.     call    v02_snd_160
  2347.     jmp    short #vd010
  2348. #vd011:    mov    edx,04e7h
  2349.     in    al,dx
  2350.     add    eax,[esp]
  2351.     shr    eax,1
  2352.     stosb
  2353.     inc    dword ptr [ebp].COUNTER_START
  2354.     dec    ecx
  2355.     je    #vd_E
  2356.  
  2357. #vd020:    mov    edx,04e8h
  2358.     in    al,dx
  2359.     test    al,1
  2360.     jne    short #vd021
  2361.     call    v02_snd_160
  2362.     jmp    short #vd020
  2363. #vd021:    mov    edx,04e7h
  2364.     in    al,dx
  2365.     inc    dword ptr [ebp].COUNTER_START
  2366.  
  2367. #vd030:    mov    edx,04e8h
  2368.     in    al,dx
  2369.     test    al,1
  2370.     jne    short #vd031
  2371.     call    v02_snd_160
  2372.     jmp    short #vd030
  2373. #vd031:    mov    edx,04e7h
  2374.     in    al,dx
  2375.     mov    [esp],eax
  2376.     inc    dword ptr [ebp].COUNTER_START
  2377.  
  2378. #vd040:    mov    edx,04e8h
  2379.     in    al,dx
  2380.     test    al,1
  2381.     jne    short #vd041
  2382.     call    v02_snd_160
  2383.     jmp    short #vd040
  2384. #vd041:    mov    edx,04e7h
  2385.     in    al,dx
  2386.     add    eax,[esp]
  2387.     shr    eax,1
  2388.     stosb
  2389.     inc    dword ptr [ebp].COUNTER_START
  2390.     dec    ecx
  2391.     je    #vd_E
  2392.  
  2393. #vd050:    mov    edx,04e8h
  2394.     in    al,dx
  2395.     test    al,1
  2396.     jne    short #vd051
  2397.     call    v02_snd_160
  2398.     jmp    short #vd050
  2399. #vd051:    mov    edx,04e7h
  2400.     in    al,dx
  2401.     inc    dword ptr [ebp].COUNTER_START
  2402.  
  2403. #vd060:    mov    edx,04e8h
  2404.     in    al,dx
  2405.     test    al,1
  2406.     jne    short #vd061
  2407.     call    v02_snd_160
  2408.     jmp    short #vd060
  2409. #vd061:    mov    edx,04e7h
  2410.     in    al,dx
  2411.     mov    [esp],eax
  2412.     inc    dword ptr [ebp].COUNTER_START
  2413.  
  2414. #vd070:    mov    edx,04e8h
  2415.     in    al,dx
  2416.     test    al,1
  2417.     jne    short #vd071
  2418.     call    v02_snd_160
  2419.     jmp    short #vd070
  2420. #vd071:    mov    edx,04e7h
  2421.     in    al,dx
  2422.     add    eax,[esp]
  2423.     shr    eax,1
  2424.     stosb
  2425.     inc    dword ptr [ebp].COUNTER_START
  2426.     dec    ecx
  2427.     je    #vd_E
  2428.  
  2429. #vd080:    mov    edx,04e8h
  2430.     in    al,dx
  2431.     test    al,1
  2432.     jne    short #vd081
  2433.     call    v02_snd_160
  2434.     jmp    short #vd080
  2435. #vd081:    mov    edx,04e7h
  2436.     in    al,dx
  2437.     inc    dword ptr [ebp].COUNTER_START
  2438.  
  2439. #vd090:    mov    edx,04e8h
  2440.     in    al,dx
  2441.     test    al,1
  2442.     jne    short #vd091
  2443.     call    v02_snd_160
  2444.     jmp    short #vd090
  2445. #vd091:    mov    edx,04e7h
  2446.     in    al,dx
  2447.     mov    [esp],eax
  2448.     inc    dword ptr [ebp].COUNTER_START
  2449.  
  2450. #vd100:    mov    edx,04e8h
  2451.     in    al,dx
  2452.     test    al,1
  2453.     jne    short #vd101
  2454.     call    v02_snd_160
  2455.     jmp    short #vd100
  2456. #vd101:    mov    edx,04e7h
  2457.     in    al,dx
  2458.     add    eax,[esp]
  2459.     shr    eax,1
  2460.     stosb
  2461.     inc    dword ptr [ebp].COUNTER_START
  2462.     dec    ecx
  2463.     je    #vd_E
  2464.  
  2465. #vd110:    mov    edx,04e8h
  2466.     in    al,dx
  2467.     test    al,1
  2468.     jne    short #vd111
  2469.     call    v02_snd_160
  2470.     jmp    short #vd110
  2471. #vd111:    mov    edx,04e7h
  2472.     in    al,dx
  2473.     inc    dword ptr [ebp].COUNTER_START
  2474.  
  2475. #vd120:    mov    edx,04e8h
  2476.     in    al,dx
  2477.     test    al,1
  2478.     jne    short #vd121
  2479.     call    v02_snd_160
  2480.     jmp    short #vd120
  2481. #vd121:    mov    edx,04e7h
  2482.     in    al,dx
  2483.     mov    [esp],eax
  2484.     inc    dword ptr [ebp].COUNTER_START
  2485.  
  2486. #vd130:    mov    edx,04e8h
  2487.     in    al,dx
  2488.     test    al,1
  2489.     jne    short #vd131
  2490.     call    v02_snd_160
  2491.     jmp    short #vd130
  2492. #vd131:    mov    edx,04e7h
  2493.     in    al,dx
  2494.     add    eax,[esp]
  2495.     shr    eax,1
  2496.     stosb
  2497.     inc    dword ptr [ebp].COUNTER_START
  2498.     dec    ecx
  2499.     je    #vd_E
  2500.  
  2501.     jmp    #vd000
  2502.  
  2503. #vd_E:    call    v02_snd_160
  2504.     inc    dword ptr [ebp].COUNTER_START
  2505.     cmp    dword ptr [ebp].GRF_COUNTER,0
  2506.     jg    #vd_E
  2507. #vd_E1:    call    v02_snd_160
  2508.     inc    dword ptr [ebp].COUNTER_START
  2509.     or    ebx,ebx
  2510.     jne    #vd_E1
  2511.  
  2512.     sti
  2513.  
  2514.     pop    eax        ; work
  2515.     xor    eax,eax
  2516.     pop    ebx
  2517.     pop    edi
  2518.     pop    esi
  2519.     mov    esp,ebp
  2520.     pop    ebp
  2521.     ret
  2522. v02_snd_trans_160_7    endp
  2523.  
  2524. ;
  2525. ;    ↓vram(160*120) trans
  2526. ;
  2527.  
  2528. DIV160_1    equ    2
  2529. DIV160_2    equ    2
  2530.  
  2531. v02_snd_160    proc    near
  2532.     push    eax
  2533.     push    ecx
  2534.     push    edi
  2535.     or    ebx,ebx
  2536.     jne    #vd01
  2537.  
  2538.     cmp    dword ptr [ebp].GRF_COUNTER,0
  2539.     jle    #vd10
  2540.     mov    eax,[ebp].GRF_WAIT
  2541.     cmp    eax,[ebp].COUNTER_START
  2542.     jg    #vd10
  2543.  
  2544.     push    eax
  2545.     mov    al,30
  2546.     mov    edx,0440h
  2547.     out    dx,al
  2548.     mov    edx,0442h
  2549.     in    ax,dx
  2550.     test    eax,0800h
  2551.     pop    eax
  2552.     je    #vd10
  2553.  
  2554.     sub    [ebp].COUNTER_START,eax
  2555.  
  2556.     mov    edi,[ebp].WK_AREA
  2557.     mov    esi,0
  2558.     mov    ecx,80/DIV160_1            ; vram 転送
  2559.     rep    movs dword ptr [edi],fs:[esi]
  2560.     mov    ds:v02_digit_wk,edi
  2561.     dec    dword ptr [ebp].GRF_COUNTER
  2562.     inc    ebx
  2563.     jmp    #vd10
  2564.  
  2565. #vd01:    cmp    ebx,120*DIV160_1
  2566.     je    short #vd03
  2567.     ja    #vd05
  2568.     mov    edi,ds:v02_digit_wk
  2569.     mov    ecx,80/DIV160_1            ; vram 転送
  2570.     rep    movs dword ptr [edi],fs:[esi]
  2571.     mov    ds:v02_digit_wk,edi
  2572.     inc    ebx
  2573.     test    ebx,DIV160_1-1
  2574.     jne    #vd10
  2575.     add    esi,1024*4-320
  2576. #vd02:    jmp    #vd10
  2577.  
  2578. #vd03:    push    ebp
  2579.     push    ebx
  2580.     mov    edi,[ebp].GRF_BUF
  2581.     mov    esi,[ebp].WK_AREA
  2582.     mov    ebp,[ebp].Y_TABLE
  2583.     xor    edx,edx
  2584.     mov    ecx,20/DIV160_2
  2585. #vd04:    lodsd
  2586.     mov    dx,ax
  2587.     shr    eax,16
  2588.     mov    dl,ds:[edx][ebp]
  2589.     mov    dh,ds:[eax][ebp]
  2590.     mov    bl,ds:[edx][ebp].32768
  2591.     lodsd
  2592.     mov    dx,ax
  2593.     shr    eax,16
  2594.     mov    dl,ds:[edx][ebp]
  2595.     mov    dh,ds:[eax][ebp]
  2596.     mov    bh,ds:[edx][ebp].32768
  2597.  
  2598.     shl    ebx,16
  2599.  
  2600.     lodsd
  2601.     mov    dx,ax
  2602.     shr    eax,16
  2603.     mov    dl,ds:[edx][ebp]
  2604.     mov    dh,ds:[eax][ebp]
  2605.     mov    bl,ds:[edx][ebp].32768
  2606.     lodsd
  2607.     mov    dx,ax
  2608.     shr    eax,16
  2609.     mov    dl,ds:[edx][ebp]
  2610.     mov    dh,ds:[eax][ebp]
  2611.     mov    bh,ds:[edx][ebp].32768
  2612.  
  2613.     rol    ebx,16
  2614.     mov    eax,ebx
  2615.     stosd
  2616.     loop    #vd04
  2617.  
  2618.     pop    ebx
  2619.     pop    ebp
  2620.     mov    [ebp].GRF_BUF,edi
  2621.     inc    ebx
  2622.     jmp    #vd10
  2623.  
  2624. #vd05:    cmp    ebx,120*DIV160_1+120*DIV160_2
  2625.     je    short #vd07
  2626.     ja    short #vd08
  2627.     push    ebp
  2628.     push    ebx
  2629.     mov    edi,[ebp].GRF_BUF
  2630.     mov    ebp,[ebp].Y_TABLE
  2631.     xor    edx,edx
  2632.     mov    ecx,20/DIV160_2
  2633. #vd06:    lodsd
  2634.     mov    dx,ax
  2635.     shr    eax,16
  2636.     mov    dl,ds:[edx][ebp]
  2637.     mov    dh,ds:[eax][ebp]
  2638.     mov    bl,ds:[edx][ebp].32768
  2639.     lodsd
  2640.     mov    dx,ax
  2641.     shr    eax,16
  2642.     mov    dl,ds:[edx][ebp]
  2643.     mov    dh,ds:[eax][ebp]
  2644.     mov    bh,ds:[edx][ebp].32768
  2645.  
  2646.     shl    ebx,16
  2647.  
  2648.     lodsd
  2649.     mov    dx,ax
  2650.     shr    eax,16
  2651.     mov    dl,ds:[edx][ebp]
  2652.     mov    dh,ds:[eax][ebp]
  2653.     mov    bl,ds:[edx][ebp].32768
  2654.     lodsd
  2655.     mov    dx,ax
  2656.     shr    eax,16
  2657.     mov    dl,ds:[edx][ebp]
  2658.     mov    dh,ds:[eax][ebp]
  2659.     mov    bh,ds:[edx][ebp].32768
  2660.  
  2661.     rol    ebx,16
  2662.     mov    eax,ebx
  2663.     stosd
  2664.     loop    #vd06
  2665.  
  2666.     pop    ebx
  2667.     pop    ebp
  2668.     mov    [ebp].GRF_BUF,edi
  2669.     inc    ebx
  2670.     jmp    #vd10
  2671.  
  2672. #vd07:    mov    esi,[ebp].WK_AREA
  2673. #vd08:    push    ebp
  2674.     push    ebx
  2675.     mov    edi,[ebp].GRF_BUF
  2676.     mov    ebp,[ebp].C_TABLE
  2677.     mov    edx,0000ffffh
  2678.     mov    ecx,20/DIV160_2
  2679.  
  2680. #vd09:    lodsd
  2681.     and    eax,0000ffffh
  2682.     mov    bl,ds:[eax][ebp]
  2683.     lodsd
  2684.     and    eax,0000ffffh
  2685.     mov    bh,ds:[eax][ebp]
  2686.  
  2687.     shl    ebx,16
  2688.  
  2689.     lodsd
  2690.     and    eax,0000ffffh
  2691.     mov    bl,ds:[eax][ebp]
  2692.     lodsd
  2693.     and    eax,0000ffffh
  2694.     mov    bh,ds:[eax][ebp]
  2695.  
  2696.     rol    ebx,16
  2697.     mov    eax,ebx
  2698.     stosd
  2699.     loop    #vd09
  2700.  
  2701.     pop    ebx
  2702.     pop    ebp
  2703.     mov    [ebp].GRF_BUF,edi
  2704.     inc    ebx
  2705.     test    ebx,DIV160_2-1
  2706.     jne    short #vd0A
  2707.     add    esi,160*2
  2708. #vd0A:    cmp    ebx,120*DIV160_1+120*DIV160_2+60*DIV160_2
  2709.     jne    short #vd10
  2710.     xor    ebx,ebx
  2711.  
  2712. #vd10:    pop    edi
  2713.     pop    ecx
  2714.     pop    eax
  2715.     ret
  2716. v02_snd_160    endp
  2717.  
  2718. ;
  2719. ;    ↑vram(160*120) trans
  2720. ;
  2721.  
  2722.  
  2723.  
  2724. ;    v02用ルーチン
  2725. ;int v02_trans_160_9600( char *snd_buf, int snd_counter 
  2726. ;              char *grf_buf, int grf_counter, int grf_wait
  2727. ;              int count_start, 
  2728. ;              char *table1, char *table2, char *work
  2729. ;            )
  2730. ;snd sampling freq=9600
  2731.  
  2732.     public    v02_trans_160_9600
  2733.     db    'v02_trans_160_9600',18
  2734. v02_trans_160_9600    proc    near
  2735.     push    ebp
  2736.     mov    ebp,esp
  2737.     push    esi
  2738.     push    edi
  2739.     push    ebx
  2740.  
  2741.     push    eax        ; work
  2742.  
  2743.     cli                    ;Int disable
  2744.     cld
  2745.  
  2746. #vdwt0:    mov    al,30        ; フィールドが1から0に変わる瞬間まで待つ
  2747.     mov    edx,0440h    ; この瞬間からタイミングを考慮して
  2748.     out    dx,al        ; 総合的にstart_countを決める必要がある
  2749.     mov    edx,0442h
  2750.     in    ax,dx
  2751.     test    eax,0800h
  2752.     je    #vdwt0
  2753. #vdwt1:    mov    al,30
  2754.     mov    edx,0440h
  2755.     out    dx,al
  2756.     mov    edx,0442h
  2757.     in    ax,dx
  2758.     test    eax,0800h
  2759.     jne    #vdwt1
  2760.  
  2761.     mov    edi,[ebp].SND_BUF
  2762.     mov    ecx,[ebp].SND_COUNTER
  2763.     cmp    ecx,0
  2764.     je    #vd_E
  2765.  
  2766.     mov    ax,10ch
  2767.     mov    fs,ax
  2768.     xor    eax,eax
  2769.     xor    ebx,ebx
  2770.  
  2771. #vd000:    mov    edx,04e8h
  2772.     in    al,dx
  2773.     test    al,1
  2774.     jne    short #vd001
  2775.     call    v02_snd_160
  2776.     jmp    short #vd000
  2777. #vd001:    mov    edx,04e7h
  2778.     in    al,dx
  2779.     mov    [esp],eax
  2780.     inc    dword ptr [ebp].COUNTER_START
  2781.  
  2782. #vd010:    mov    edx,04e8h
  2783.     in    al,dx
  2784.     test    al,1
  2785.     jne    short #vd011
  2786.     call    v02_snd_160
  2787.     jmp    short #vd010
  2788. #vd011:    mov    edx,04e7h
  2789.     in    al,dx
  2790.     add    eax,[esp]
  2791.     shr    eax,1
  2792.     stosb
  2793.     inc    dword ptr [ebp].COUNTER_START
  2794.     dec    ecx
  2795.     je    #vd_E
  2796.  
  2797.     jmp    #vd000
  2798.  
  2799. #vd_E:    call    v02_snd_160
  2800.     inc    dword ptr [ebp].COUNTER_START
  2801.     cmp    dword ptr [ebp].GRF_COUNTER,0
  2802.     jg    #vd_E
  2803. #vd_E1:    call    v02_snd_160
  2804.     inc    dword ptr [ebp].COUNTER_START
  2805.     or    ebx,ebx
  2806.     jne    #vd_E1
  2807.  
  2808.     sti
  2809.  
  2810.     pop    eax        ; work
  2811.     xor    eax,eax
  2812.     pop    ebx
  2813.     pop    edi
  2814.     pop    esi
  2815.     mov    esp,ebp
  2816.     pop    ebp
  2817.     ret
  2818. v02_trans_160_9600    endp
  2819.  
  2820. ;    v02用ルーチン
  2821. ;int v02_trans_160_19200( char *snd_buf, int snd_counter 
  2822. ;              char *grf_buf, int grf_counter, int grf_wait
  2823. ;              int count_start, 
  2824. ;              char *table1, char *table2, char *work
  2825. ;            )
  2826. ;snd sampling freq=19200
  2827.  
  2828.     public    v02_trans_160_19200
  2829.     db    'v02_trans_160_19200',19
  2830. v02_trans_160_19200    proc    near
  2831.     push    ebp
  2832.     mov    ebp,esp
  2833.     push    esi
  2834.     push    edi
  2835.     push    ebx
  2836.  
  2837.     cli                    ;Int disable
  2838.     cld
  2839.  
  2840. #vdwt0:    mov    al,30        ; フィールドが1から0に変わる瞬間まで待つ
  2841.     mov    edx,0440h    ; この瞬間からタイミングを考慮して
  2842.     out    dx,al        ; 総合的にstart_countを決める必要がある
  2843.     mov    edx,0442h
  2844.     in    ax,dx
  2845.     test    eax,0800h
  2846.     je    #vdwt0
  2847. #vdwt1:    mov    al,30
  2848.     mov    edx,0440h
  2849.     out    dx,al
  2850.     mov    edx,0442h
  2851.     in    ax,dx
  2852.     test    eax,0800h
  2853.     jne    #vdwt1
  2854.  
  2855.     mov    edi,[ebp].SND_BUF
  2856.     mov    ecx,[ebp].SND_COUNTER
  2857.     cmp    ecx,0
  2858.     je    #vd_E
  2859.  
  2860.     mov    ax,10ch
  2861.     mov    fs,ax
  2862.     xor    eax,eax
  2863.     xor    ebx,ebx
  2864.  
  2865. #vd000:    mov    edx,04e8h
  2866.     in    al,dx
  2867.     test    al,1
  2868.     jne    short #vd001
  2869.     call    v02_snd_160
  2870.     jmp    short #vd000
  2871. #vd001:    mov    edx,04e7h
  2872.     in    al,dx
  2873.     stosb
  2874.     inc    dword ptr [ebp].COUNTER_START
  2875.     dec    ecx
  2876.     jne    #vd000
  2877.  
  2878. #vd_E:    call    v02_snd_160
  2879.     inc    dword ptr [ebp].COUNTER_START
  2880.     cmp    dword ptr [ebp].GRF_COUNTER,0
  2881.     jg    #vd_E
  2882. #vd_E1:    call    v02_snd_160
  2883.     inc    dword ptr [ebp].COUNTER_START
  2884.     or    ebx,ebx
  2885.     jne    #vd_E1
  2886.  
  2887.     sti
  2888.  
  2889.     xor    eax,eax
  2890.     pop    ebx
  2891.     pop    edi
  2892.     pop    esi
  2893.     mov    esp,ebp
  2894.     pop    ebp
  2895.     ret
  2896. v02_trans_160_19200    endp
  2897.  
  2898.  
  2899.  
  2900.  
  2901. ;int v02_snd_trans_192_4( char *snd_buf, int snd_counter 
  2902. ;              char *grf_buf, int grf_counter, int grf_wait
  2903. ;              int count_start, 
  2904. ;              char *table1, char *table2, char *work
  2905. ;            )
  2906. ;snd sampling freq=12000
  2907.  
  2908.     public    v02_snd_trans_192_4
  2909.     db    'v02_snd_trans_192_4',19
  2910. v02_snd_trans_192_4    proc    near
  2911.     push    ebp
  2912.     mov    ebp,esp
  2913.     push    esi
  2914.     push    edi
  2915.     push    ebx
  2916.  
  2917.     push    eax        ; work
  2918.  
  2919.     cli                    ;Int disable
  2920.     cld
  2921.  
  2922. #vdwt0:    mov    al,30        ; フィールドが1から0に変わる瞬間まで待つ
  2923.     mov    edx,0440h    ; この瞬間からタイミングを考慮して
  2924.     out    dx,al        ; 総合的にstart_countを決める必要がある
  2925.     mov    edx,0442h
  2926.     in    ax,dx
  2927.     test    eax,0800h
  2928.     je    #vdwt0
  2929. #vdwt1:    mov    al,30
  2930.     mov    edx,0440h
  2931.     out    dx,al
  2932.     mov    edx,0442h
  2933.     in    ax,dx
  2934.     test    eax,0800h
  2935.     jne    #vdwt1
  2936.  
  2937.     mov    edi,[ebp].SND_BUF
  2938.     mov    ecx,[ebp].SND_COUNTER
  2939.     cmp    ecx,0
  2940.     je    #vd_E
  2941.  
  2942.     mov    ax,10ch
  2943.     mov    fs,ax
  2944.     xor    eax,eax
  2945.     xor    ebx,ebx
  2946.  
  2947. #vd000:    mov    edx,04e8h
  2948.     in    al,dx
  2949.     test    al,1
  2950.     jne    short #vd001
  2951.     call    v02_snd_192
  2952.     jmp    short #vd000
  2953. #vd001:    mov    edx,04e7h
  2954.     in    al,dx
  2955.     stosb
  2956.     inc    dword ptr [ebp].COUNTER_START
  2957.     dec    ecx
  2958.     je    #vd_E
  2959.  
  2960. #vd010:    mov    edx,04e8h
  2961.     in    al,dx
  2962.     test    al,1
  2963.     jne    short #vd011
  2964.     call    v02_snd_192
  2965.     jmp    short #vd010
  2966. #vd011:    mov    edx,04e7h
  2967.     in    al,dx
  2968.     inc    dword ptr [ebp].COUNTER_START
  2969.  
  2970. #vd020:    mov    edx,04e8h
  2971.     in    al,dx
  2972.     test    al,1
  2973.     jne    short #vd021
  2974.     call    v02_snd_192
  2975.     jmp    short #vd020
  2976. #vd021:    mov    edx,04e7h
  2977.     in    al,dx
  2978.     stosb
  2979.     inc    dword ptr [ebp].COUNTER_START
  2980.     dec    ecx
  2981.     je    #vd_E
  2982.  
  2983. #vd030:    mov    edx,04e8h
  2984.     in    al,dx
  2985.     test    al,1
  2986.     jne    short #vd031
  2987.     call    v02_snd_192
  2988.     jmp    short #vd030
  2989. #vd031:    mov    edx,04e7h
  2990.     in    al,dx
  2991.     mov    [esp],eax
  2992.     inc    dword ptr [ebp].COUNTER_START
  2993.  
  2994. #vd040:    mov    edx,04e8h
  2995.     in    al,dx
  2996.     test    al,1
  2997.     jne    short #vd041
  2998.     call    v02_snd_192
  2999.     jmp    short #vd040
  3000. #vd041:    mov    edx,04e7h
  3001.     in    al,dx
  3002.     add    eax,[esp]
  3003.     shr    eax,1
  3004.     stosb
  3005.     inc    dword ptr [ebp].COUNTER_START
  3006.     dec    ecx
  3007.     je    #vd_E
  3008.  
  3009. #vd050:    mov    edx,04e8h
  3010.     in    al,dx
  3011.     test    al,1
  3012.     jne    short #vd051
  3013.     call    v02_snd_192
  3014.     jmp    short #vd050
  3015. #vd051:    mov    edx,04e7h
  3016.     in    al,dx
  3017.     stosb
  3018.     inc    dword ptr [ebp].COUNTER_START
  3019.     dec    ecx
  3020.     je    #vd_E
  3021.  
  3022. #vd060:    mov    edx,04e8h
  3023.     in    al,dx
  3024.     test    al,1
  3025.     jne    short #vd061
  3026.     call    v02_snd_192
  3027.     jmp    short #vd060
  3028. #vd061:    mov    edx,04e7h
  3029.     in    al,dx
  3030.     mov    [esp],eax
  3031.     inc    dword ptr [ebp].COUNTER_START
  3032.  
  3033. #vd070:    mov    edx,04e8h
  3034.     in    al,dx
  3035.     test    al,1
  3036.     jne    short #vd071
  3037.     call    v02_snd_192
  3038.     jmp    short #vd070
  3039. #vd071:    mov    edx,04e7h
  3040.     in    al,dx
  3041.     add    eax,[esp]
  3042.     shr    eax,1
  3043.     stosb
  3044.     inc    dword ptr [ebp].COUNTER_START
  3045.     dec    ecx
  3046.     je    #vd_E
  3047.  
  3048.     jmp    #vd000
  3049.  
  3050. #vd_E:    call    v02_snd_192
  3051.     inc    dword ptr [ebp].COUNTER_START
  3052.     cmp    dword ptr [ebp].GRF_COUNTER,0
  3053.     jg    #vd_E
  3054. #vd_E1:    call    v02_snd_192
  3055.     inc    dword ptr [ebp].COUNTER_START
  3056.     or    ebx,ebx
  3057.     jne    #vd_E1
  3058.  
  3059.     sti
  3060.  
  3061.     pop    eax        ; work
  3062.     xor    eax,eax
  3063.     pop    ebx
  3064.     pop    edi
  3065.     pop    esi
  3066.     mov    esp,ebp
  3067.     pop    ebp
  3068.     ret
  3069. v02_snd_trans_192_4    endp
  3070.  
  3071. ;int v02_snd_trans_192_5( char *snd_buf, int snd_counter 
  3072. ;              char *grf_buf, int grf_counter, int grf_wait
  3073. ;              int count_start, 
  3074. ;              char *table1, char *table2, char *work
  3075. ;            )
  3076. ;snd sampling freq=9200
  3077.  
  3078.     public    v02_snd_trans_192_5
  3079.     db    'v02_snd_trans_192_5',19
  3080. v02_snd_trans_192_5    proc    near
  3081.     push    ebp
  3082.     mov    ebp,esp
  3083.     push    esi
  3084.     push    edi
  3085.     push    ebx
  3086.  
  3087.     push    eax        ; work
  3088.  
  3089.     cli                    ;Int disable
  3090.     cld
  3091.  
  3092. #vdwt0:    mov    al,30        ; フィールドが1から0に変わる瞬間まで待つ
  3093.     mov    edx,0440h    ; この瞬間からタイミングを考慮して
  3094.     out    dx,al        ; 総合的にstart_countを決める必要がある
  3095.     mov    edx,0442h
  3096.     in    ax,dx
  3097.     test    eax,0800h
  3098.     je    #vdwt0
  3099. #vdwt1:    mov    al,30
  3100.     mov    edx,0440h
  3101.     out    dx,al
  3102.     mov    edx,0442h
  3103.     in    ax,dx
  3104.     test    eax,0800h
  3105.     jne    #vdwt1
  3106.  
  3107.     mov    edi,[ebp].SND_BUF
  3108.     mov    ecx,[ebp].SND_COUNTER
  3109.     cmp    ecx,0
  3110.     je    #vd_E
  3111.  
  3112.     mov    ax,10ch
  3113.     mov    fs,ax
  3114.     xor    eax,eax
  3115.     xor    ebx,ebx
  3116.  
  3117. #vd000:    mov    edx,04e8h
  3118.     in    al,dx
  3119.     test    al,1
  3120.     jne    short #vd001
  3121.     call    v02_snd_192
  3122.     jmp    short #vd000
  3123. #vd001:    mov    edx,04e7h
  3124.     in    al,dx
  3125.     mov    [esp],eax
  3126.     inc    dword ptr [ebp].COUNTER_START
  3127.  
  3128. #vd010:    mov    edx,04e8h
  3129.     in    al,dx
  3130.     test    al,1
  3131.     jne    short #vd011
  3132.     call    v02_snd_192
  3133.     jmp    short #vd010
  3134. #vd011:    mov    edx,04e7h
  3135.     in    al,dx
  3136.     add    eax,[esp]
  3137.     shr    eax,1
  3138.     stosb
  3139.     inc    dword ptr [ebp].COUNTER_START
  3140.     dec    ecx
  3141.     je    #vd_E
  3142.  
  3143.     jmp    #vd000
  3144.  
  3145. #vd_E:    call    v02_snd_192
  3146.     inc    dword ptr [ebp].COUNTER_START
  3147.     cmp    dword ptr [ebp].GRF_COUNTER,0
  3148.     jg    #vd_E
  3149. #vd_E1:    call    v02_snd_192
  3150.     inc    dword ptr [ebp].COUNTER_START
  3151.     or    ebx,ebx
  3152.     jne    #vd_E1
  3153.  
  3154.     sti
  3155.  
  3156.     pop    eax        ; work
  3157.     xor    eax,eax
  3158.     pop    ebx
  3159.     pop    edi
  3160.     pop    esi
  3161.     mov    esp,ebp
  3162.     pop    ebp
  3163.     ret
  3164. v02_snd_trans_192_5    endp
  3165.  
  3166. ;int v02_snd_trans_192_6( char *snd_buf, int snd_counter 
  3167. ;              char *grf_buf, int grf_counter, int grf_wait
  3168. ;              int count_start, 
  3169. ;              char *table1, char *table2, char *work
  3170. ;            )
  3171. ;snd sampling freq=8000
  3172.  
  3173.     public    v02_snd_trans_192_6
  3174.     db    'v02_snd_trans_192_6',19
  3175. v02_snd_trans_192_6    proc    near
  3176.     push    ebp
  3177.     mov    ebp,esp
  3178.     push    esi
  3179.     push    edi
  3180.     push    ebx
  3181.  
  3182.     push    eax        ; work
  3183.  
  3184.     cli                    ;Int disable
  3185.     cld
  3186.  
  3187. #vdwt0:    mov    al,30        ; フィールドが1から0に変わる瞬間まで待つ
  3188.     mov    edx,0440h    ; この瞬間からタイミングを考慮して
  3189.     out    dx,al        ; 総合的にstart_countを決める必要がある
  3190.     mov    edx,0442h
  3191.     in    ax,dx
  3192.     test    eax,0800h
  3193.     je    #vdwt0
  3194. #vdwt1:    mov    al,30
  3195.     mov    edx,0440h
  3196.     out    dx,al
  3197.     mov    edx,0442h
  3198.     in    ax,dx
  3199.     test    eax,0800h
  3200.     jne    #vdwt1
  3201.  
  3202.     mov    edi,[ebp].SND_BUF
  3203.     mov    ecx,[ebp].SND_COUNTER
  3204.     cmp    ecx,0
  3205.     je    #vd_E
  3206.  
  3207.     mov    ax,10ch
  3208.     mov    fs,ax
  3209.     xor    eax,eax
  3210.     xor    ebx,ebx
  3211.  
  3212. #vd000:    mov    edx,04e8h
  3213.     in    al,dx
  3214.     test    al,1
  3215.     jne    short #vd001
  3216.     call    v02_snd_192
  3217.     jmp    short #vd000
  3218. #vd001:    mov    edx,04e7h
  3219.     in    al,dx
  3220.     stosb
  3221.     inc    dword ptr [ebp].COUNTER_START
  3222.     dec    ecx
  3223.     je    #vd_E
  3224.  
  3225. #vd010:    mov    edx,04e8h
  3226.     in    al,dx
  3227.     test    al,1
  3228.     jne    short #vd011
  3229.     call    v02_snd_192
  3230.     jmp    short #vd010
  3231. #vd011:    mov    edx,04e7h
  3232.     in    al,dx
  3233.     inc    dword ptr [ebp].COUNTER_START
  3234.  
  3235. #vd020:    mov    edx,04e8h
  3236.     in    al,dx
  3237.     test    al,1
  3238.     jne    short #vd021
  3239.     call    v02_snd_192
  3240.     jmp    short #vd020
  3241. #vd021:    mov    edx,04e7h
  3242.     in    al,dx
  3243.     mov    [esp],eax
  3244.     inc    dword ptr [ebp].COUNTER_START
  3245.  
  3246. #vd030:    mov    edx,04e8h
  3247.     in    al,dx
  3248.     test    al,1
  3249.     jne    short #vd031
  3250.     call    v02_snd_192
  3251.     jmp    short #vd030
  3252. #vd031:    mov    edx,04e7h
  3253.     in    al,dx
  3254.     add    eax,[esp]
  3255.     shr    eax,1
  3256.     stosb
  3257.     inc    dword ptr [ebp].COUNTER_START
  3258.     dec    ecx
  3259.     je    #vd_E
  3260.  
  3261. #vd040:    mov    edx,04e8h
  3262.     in    al,dx
  3263.     test    al,1
  3264.     jne    short #vd041
  3265.     call    v02_snd_192
  3266.     jmp    short #vd040
  3267. #vd041:    mov    edx,04e7h
  3268.     in    al,dx
  3269.     inc    dword ptr [ebp].COUNTER_START
  3270.  
  3271. #vd050:    mov    edx,04e8h
  3272.     in    al,dx
  3273.     test    al,1
  3274.     jne    short #vd051
  3275.     call    v02_snd_192
  3276.     jmp    short #vd050
  3277. #vd051:    mov    edx,04e7h
  3278.     in    al,dx
  3279.     stosb
  3280.     inc    dword ptr [ebp].COUNTER_START
  3281.     dec    ecx
  3282.     je    #vd_E
  3283.  
  3284. #vd060:    mov    edx,04e8h
  3285.     in    al,dx
  3286.     test    al,1
  3287.     jne    short #vd061
  3288.     call    v02_snd_192
  3289.     jmp    short #vd060
  3290. #vd061:    mov    edx,04e7h
  3291.     in    al,dx
  3292.     inc    dword ptr [ebp].COUNTER_START
  3293.  
  3294. #vd070:    mov    edx,04e8h
  3295.     in    al,dx
  3296.     test    al,1
  3297.     jne    short #vd071
  3298.     call    v02_snd_192
  3299.     jmp    short #vd070
  3300. #vd071:    mov    edx,04e7h
  3301.     in    al,dx
  3302.     mov    [esp],eax
  3303.     inc    dword ptr [ebp].COUNTER_START
  3304.  
  3305. #vd080:    mov    edx,04e8h
  3306.     in    al,dx
  3307.     test    al,1
  3308.     jne    short #vd081
  3309.     call    v02_snd_192
  3310.     jmp    short #vd080
  3311. #vd081:    mov    edx,04e7h
  3312.     in    al,dx
  3313.     add    eax,[esp]
  3314.     shr    eax,1
  3315.     stosb
  3316.     inc    dword ptr [ebp].COUNTER_START
  3317.     dec    ecx
  3318.     je    #vd_E
  3319.  
  3320. #vd090:    mov    edx,04e8h
  3321.     in    al,dx
  3322.     test    al,1
  3323.     jne    short #vd091
  3324.     call    v02_snd_192
  3325.     jmp    short #vd090
  3326. #vd091:    mov    edx,04e7h
  3327.     in    al,dx
  3328.     inc    dword ptr [ebp].COUNTER_START
  3329.  
  3330. #vd100:    mov    edx,04e8h
  3331.     in    al,dx
  3332.     test    al,1
  3333.     jne    short #vd101
  3334.     call    v02_snd_192
  3335.     jmp    short #vd100
  3336. #vd101:    mov    edx,04e7h
  3337.     in    al,dx
  3338.     stosb
  3339.     inc    dword ptr [ebp].COUNTER_START
  3340.     dec    ecx
  3341.     je    #vd_E
  3342.  
  3343. #vd110:    mov    edx,04e8h
  3344.     in    al,dx
  3345.     test    al,1
  3346.     jne    short #vd111
  3347.     call    v02_snd_192
  3348.     jmp    short #vd110
  3349. #vd111:    mov    edx,04e7h
  3350.     in    al,dx
  3351.     inc    dword ptr [ebp].COUNTER_START
  3352.  
  3353.     jmp    #vd000
  3354.  
  3355. #vd_E:    call    v02_snd_192
  3356.     inc    dword ptr [ebp].COUNTER_START
  3357.     cmp    dword ptr [ebp].GRF_COUNTER,0
  3358.     jg    #vd_E
  3359. #vd_E1:    call    v02_snd_192
  3360.     inc    dword ptr [ebp].COUNTER_START
  3361.     or    ebx,ebx
  3362.     jne    #vd_E1
  3363.  
  3364.     sti
  3365.  
  3366.     pop    eax        ; work
  3367.     xor    eax,eax
  3368.     pop    ebx
  3369.     pop    edi
  3370.     pop    esi
  3371.     mov    esp,ebp
  3372.     pop    ebp
  3373.     ret
  3374. v02_snd_trans_192_6    endp
  3375.  
  3376. ;int v02_snd_trans_192_7( char *snd_buf, int snd_counter 
  3377. ;              char *grf_buf, int grf_counter, int grf_wait
  3378. ;              int count_start, 
  3379. ;              char *table1, char *table2, char *work
  3380. ;            )
  3381. ;snd sampling freq=6857
  3382.  
  3383.     public    v02_snd_trans_192_7
  3384.     db    'v02_snd_trans_192_7',19
  3385. v02_snd_trans_192_7    proc    near
  3386.     push    ebp
  3387.     mov    ebp,esp
  3388.     push    esi
  3389.     push    edi
  3390.     push    ebx
  3391.  
  3392.     push    eax        ; work
  3393.  
  3394.     cli                    ;Int disable
  3395.     cld
  3396.  
  3397. #vdwt0:    mov    al,30        ; フィールドが1から0に変わる瞬間まで待つ
  3398.     mov    edx,0440h    ; この瞬間からタイミングを考慮して
  3399.     out    dx,al        ; 総合的にstart_countを決める必要がある
  3400.     mov    edx,0442h
  3401.     in    ax,dx
  3402.     test    eax,0800h
  3403.     je    #vdwt0
  3404. #vdwt1:    mov    al,30
  3405.     mov    edx,0440h
  3406.     out    dx,al
  3407.     mov    edx,0442h
  3408.     in    ax,dx
  3409.     test    eax,0800h
  3410.     jne    #vdwt1
  3411.  
  3412.     mov    edi,[ebp].SND_BUF
  3413.     mov    ecx,[ebp].SND_COUNTER
  3414.     cmp    ecx,0
  3415.     je    #vd_E
  3416.  
  3417.     mov    ax,10ch
  3418.     mov    fs,ax
  3419.     xor    eax,eax
  3420.     xor    ebx,ebx
  3421.  
  3422. #vd000:    mov    edx,04e8h
  3423.     in    al,dx
  3424.     test    al,1
  3425.     jne    short #vd001
  3426.     call    v02_snd_192
  3427.     jmp    short #vd000
  3428. #vd001:    mov    edx,04e7h
  3429.     in    al,dx
  3430.     mov    [esp],eax
  3431.     inc    dword ptr [ebp].COUNTER_START
  3432.  
  3433. #vd010:    mov    edx,04e8h
  3434.     in    al,dx
  3435.     test    al,1
  3436.     jne    short #vd011
  3437.     call    v02_snd_192
  3438.     jmp    short #vd010
  3439. #vd011:    mov    edx,04e7h
  3440.     in    al,dx
  3441.     add    eax,[esp]
  3442.     shr    eax,1
  3443.     stosb
  3444.     inc    dword ptr [ebp].COUNTER_START
  3445.     dec    ecx
  3446.     je    #vd_E
  3447.  
  3448. #vd020:    mov    edx,04e8h
  3449.     in    al,dx
  3450.     test    al,1
  3451.     jne    short #vd021
  3452.     call    v02_snd_192
  3453.     jmp    short #vd020
  3454. #vd021:    mov    edx,04e7h
  3455.     in    al,dx
  3456.     inc    dword ptr [ebp].COUNTER_START
  3457.  
  3458. #vd030:    mov    edx,04e8h
  3459.     in    al,dx
  3460.     test    al,1
  3461.     jne    short #vd031
  3462.     call    v02_snd_192
  3463.     jmp    short #vd030
  3464. #vd031:    mov    edx,04e7h
  3465.     in    al,dx
  3466.     mov    [esp],eax
  3467.     inc    dword ptr [ebp].COUNTER_START
  3468.  
  3469. #vd040:    mov    edx,04e8h
  3470.     in    al,dx
  3471.     test    al,1
  3472.     jne    short #vd041
  3473.     call    v02_snd_192
  3474.     jmp    short #vd040
  3475. #vd041:    mov    edx,04e7h
  3476.     in    al,dx
  3477.     add    eax,[esp]
  3478.     shr    eax,1
  3479.     stosb
  3480.     inc    dword ptr [ebp].COUNTER_START
  3481.     dec    ecx
  3482.     je    #vd_E
  3483.  
  3484. #vd050:    mov    edx,04e8h
  3485.     in    al,dx
  3486.     test    al,1
  3487.     jne    short #vd051
  3488.     call    v02_snd_192
  3489.     jmp    short #vd050
  3490. #vd051:    mov    edx,04e7h
  3491.     in    al,dx
  3492.     inc    dword ptr [ebp].COUNTER_START
  3493.  
  3494. #vd060:    mov    edx,04e8h
  3495.     in    al,dx
  3496.     test    al,1
  3497.     jne    short #vd061
  3498.     call    v02_snd_192
  3499.     jmp    short #vd060
  3500. #vd061:    mov    edx,04e7h
  3501.     in    al,dx
  3502.     mov    [esp],eax
  3503.     inc    dword ptr [ebp].COUNTER_START
  3504.  
  3505. #vd070:    mov    edx,04e8h
  3506.     in    al,dx
  3507.     test    al,1
  3508.     jne    short #vd071
  3509.     call    v02_snd_192
  3510.     jmp    short #vd070
  3511. #vd071:    mov    edx,04e7h
  3512.     in    al,dx
  3513.     add    eax,[esp]
  3514.     shr    eax,1
  3515.     stosb
  3516.     inc    dword ptr [ebp].COUNTER_START
  3517.     dec    ecx
  3518.     je    #vd_E
  3519.  
  3520. #vd080:    mov    edx,04e8h
  3521.     in    al,dx
  3522.     test    al,1
  3523.     jne    short #vd081
  3524.     call    v02_snd_192
  3525.     jmp    short #vd080
  3526. #vd081:    mov    edx,04e7h
  3527.     in    al,dx
  3528.     inc    dword ptr [ebp].COUNTER_START
  3529.  
  3530. #vd090:    mov    edx,04e8h
  3531.     in    al,dx
  3532.     test    al,1
  3533.     jne    short #vd091
  3534.     call    v02_snd_192
  3535.     jmp    short #vd090
  3536. #vd091:    mov    edx,04e7h
  3537.     in    al,dx
  3538.     mov    [esp],eax
  3539.     inc    dword ptr [ebp].COUNTER_START
  3540.  
  3541. #vd100:    mov    edx,04e8h
  3542.     in    al,dx
  3543.     test    al,1
  3544.     jne    short #vd101
  3545.     call    v02_snd_192
  3546.     jmp    short #vd100
  3547. #vd101:    mov    edx,04e7h
  3548.     in    al,dx
  3549.     add    eax,[esp]
  3550.     shr    eax,1
  3551.     stosb
  3552.     inc    dword ptr [ebp].COUNTER_START
  3553.     dec    ecx
  3554.     je    #vd_E
  3555.  
  3556. #vd110:    mov    edx,04e8h
  3557.     in    al,dx
  3558.     test    al,1
  3559.     jne    short #vd111
  3560.     call    v02_snd_192
  3561.     jmp    short #vd110
  3562. #vd111:    mov    edx,04e7h
  3563.     in    al,dx
  3564.     inc    dword ptr [ebp].COUNTER_START
  3565.  
  3566. #vd120:    mov    edx,04e8h
  3567.     in    al,dx
  3568.     test    al,1
  3569.     jne    short #vd121
  3570.     call    v02_snd_192
  3571.     jmp    short #vd120
  3572. #vd121:    mov    edx,04e7h
  3573.     in    al,dx
  3574.     mov    [esp],eax
  3575.     inc    dword ptr [ebp].COUNTER_START
  3576.  
  3577. #vd130:    mov    edx,04e8h
  3578.     in    al,dx
  3579.     test    al,1
  3580.     jne    short #vd131
  3581.     call    v02_snd_192
  3582.     jmp    short #vd130
  3583. #vd131:    mov    edx,04e7h
  3584.     in    al,dx
  3585.     add    eax,[esp]
  3586.     shr    eax,1
  3587.     stosb
  3588.     inc    dword ptr [ebp].COUNTER_START
  3589.     dec    ecx
  3590.     je    #vd_E
  3591.  
  3592.     jmp    #vd000
  3593.  
  3594. #vd_E:    call    v02_snd_192
  3595.     inc    dword ptr [ebp].COUNTER_START
  3596.     cmp    dword ptr [ebp].GRF_COUNTER,0
  3597.     jg    #vd_E
  3598. #vd_E1:    call    v02_snd_192
  3599.     inc    dword ptr [ebp].COUNTER_START
  3600.     or    ebx,ebx
  3601.     jne    #vd_E1
  3602.  
  3603.     sti
  3604.  
  3605.     pop    eax        ; work
  3606.     xor    eax,eax
  3607.     pop    ebx
  3608.     pop    edi
  3609.     pop    esi
  3610.     mov    esp,ebp
  3611.     pop    ebp
  3612.     ret
  3613. v02_snd_trans_192_7    endp
  3614.  
  3615. ;
  3616. ;    ↓vram(192*144) trans
  3617. ;
  3618.  
  3619. DIV192_1    equ    2
  3620. DIV192_2    equ    2
  3621.  
  3622. v02_snd_192    proc    near
  3623.     push    eax
  3624.     push    ecx
  3625.     push    edi
  3626.     or    ebx,ebx
  3627.     jne    #vd01
  3628.  
  3629.     cmp    dword ptr [ebp].GRF_COUNTER,0
  3630.     jle    #vd10
  3631.     mov    eax,[ebp].GRF_WAIT
  3632.     cmp    eax,[ebp].COUNTER_START
  3633.     jg    #vd10
  3634.  
  3635.     push    eax
  3636.     mov    al,30
  3637.     mov    edx,0440h
  3638.     out    dx,al
  3639.     mov    edx,0442h
  3640.     in    ax,dx
  3641.     test    eax,0800h
  3642.     pop    eax
  3643.     je    #vd10
  3644.  
  3645.     sub    [ebp].COUNTER_START,eax
  3646.  
  3647.     mov    edi,[ebp].WK_AREA
  3648.     mov    esi,128+1024*2*48
  3649.     mov    ecx,96/DIV192_1            ; vram 転送
  3650.     rep    movs dword ptr [edi],fs:[esi]
  3651.     mov    ds:v02_digit_wk,edi
  3652.     dec    dword ptr [ebp].GRF_COUNTER
  3653.     inc    ebx
  3654.     jmp    #vd10
  3655.  
  3656. #vd01:    cmp    ebx,144*DIV192_1
  3657.     je    short #vd03
  3658.     ja    #vd05
  3659.     mov    edi,ds:v02_digit_wk
  3660.     mov    ecx,96/DIV192_1            ; vram 転送
  3661.     rep    movs dword ptr [edi],fs:[esi]
  3662.     mov    ds:v02_digit_wk,edi
  3663.     inc    ebx
  3664.     test    ebx,DIV192_1-1
  3665.     jne    #vd10
  3666.     add    esi,1024*2-384
  3667. #vd02:    jmp    #vd10
  3668.  
  3669. #vd03:    push    ebp
  3670.     push    ebx
  3671.     mov    edi,[ebp].GRF_BUF
  3672.     mov    esi,[ebp].WK_AREA
  3673.     mov    ebp,[ebp].Y_TABLE
  3674.     xor    edx,edx
  3675.     mov    ecx,24/DIV192_2
  3676. #vd04:    lodsd
  3677.     mov    dx,ax
  3678.     shr    eax,16
  3679.     mov    dl,ds:[edx][ebp]
  3680.     mov    dh,ds:[eax][ebp]
  3681.     mov    bl,ds:[edx][ebp].32768
  3682.     lodsd
  3683.     mov    dx,ax
  3684.     shr    eax,16
  3685.     mov    dl,ds:[edx][ebp]
  3686.     mov    dh,ds:[eax][ebp]
  3687.     mov    bh,ds:[edx][ebp].32768
  3688.  
  3689.     shl    ebx,16
  3690.  
  3691.     lodsd
  3692.     mov    dx,ax
  3693.     shr    eax,16
  3694.     mov    dl,ds:[edx][ebp]
  3695.     mov    dh,ds:[eax][ebp]
  3696.     mov    bl,ds:[edx][ebp].32768
  3697.     lodsd
  3698.     mov    dx,ax
  3699.     shr    eax,16
  3700.     mov    dl,ds:[edx][ebp]
  3701.     mov    dh,ds:[eax][ebp]
  3702.     mov    bh,ds:[edx][ebp].32768
  3703.  
  3704.     rol    ebx,16
  3705.     mov    eax,ebx
  3706.     stosd
  3707.     loop    #vd04
  3708.  
  3709.     pop    ebx
  3710.     pop    ebp
  3711.     mov    [ebp].GRF_BUF,edi
  3712.     inc    ebx
  3713.     jmp    #vd10
  3714.  
  3715. #vd05:    cmp    ebx,144*DIV192_1+144*DIV192_2
  3716.     je    short #vd07
  3717.     ja    short #vd08
  3718.     push    ebp
  3719.     push    ebx
  3720.     mov    edi,[ebp].GRF_BUF
  3721.     mov    ebp,[ebp].Y_TABLE
  3722.     xor    edx,edx
  3723.     mov    ecx,24/DIV192_2
  3724. #vd06:    lodsd
  3725.     mov    dx,ax
  3726.     shr    eax,16
  3727.     mov    dl,ds:[edx][ebp]
  3728.     mov    dh,ds:[eax][ebp]
  3729.     mov    bl,ds:[edx][ebp].32768
  3730.     lodsd
  3731.     mov    dx,ax
  3732.     shr    eax,16
  3733.     mov    dl,ds:[edx][ebp]
  3734.     mov    dh,ds:[eax][ebp]
  3735.     mov    bh,ds:[edx][ebp].32768
  3736.  
  3737.     shl    ebx,16
  3738.  
  3739.     lodsd
  3740.     mov    dx,ax
  3741.     shr    eax,16
  3742.     mov    dl,ds:[edx][ebp]
  3743.     mov    dh,ds:[eax][ebp]
  3744.     mov    bl,ds:[edx][ebp].32768
  3745.     lodsd
  3746.     mov    dx,ax
  3747.     shr    eax,16
  3748.     mov    dl,ds:[edx][ebp]
  3749.     mov    dh,ds:[eax][ebp]
  3750.     mov    bh,ds:[edx][ebp].32768
  3751.  
  3752.     rol    ebx,16
  3753.     mov    eax,ebx
  3754.     stosd
  3755.     loop    #vd06
  3756.  
  3757.     pop    ebx
  3758.     pop    ebp
  3759.     mov    [ebp].GRF_BUF,edi
  3760.     inc    ebx
  3761.     jmp    #vd10
  3762.  
  3763. #vd07:    mov    esi,[ebp].WK_AREA
  3764. #vd08:    push    ebp
  3765.     push    ebx
  3766.     mov    edi,[ebp].GRF_BUF
  3767.     mov    ebp,[ebp].C_TABLE
  3768.     mov    edx,0000ffffh
  3769.     mov    ecx,24/DIV192_2
  3770.  
  3771. #vd09:    lodsd
  3772.     and    eax,0000ffffh
  3773.     mov    bl,ds:[eax][ebp]
  3774.     lodsd
  3775.     and    eax,0000ffffh
  3776.     mov    bh,ds:[eax][ebp]
  3777.  
  3778.     shl    ebx,16
  3779.  
  3780.     lodsd
  3781.     and    eax,0000ffffh
  3782.     mov    bl,ds:[eax][ebp]
  3783.     lodsd
  3784.     and    eax,0000ffffh
  3785.     mov    bh,ds:[eax][ebp]
  3786.  
  3787.     rol    ebx,16
  3788.     mov    eax,ebx
  3789.     stosd
  3790.     loop    #vd09
  3791.  
  3792.     pop    ebx
  3793.     pop    ebp
  3794.     mov    [ebp].GRF_BUF,edi
  3795.     inc    ebx
  3796.     test    ebx,DIV192_2-1
  3797.     jne    short #vd0A
  3798.     add    esi,192*2
  3799. #vd0A:    cmp    ebx,144*DIV192_1+144*DIV192_2+72*DIV192_2
  3800.     jne    short #vd10
  3801.     xor    ebx,ebx
  3802.  
  3803. #vd10:    pop    edi
  3804.     pop    ecx
  3805.     pop    eax
  3806.     ret
  3807. v02_snd_192    endp
  3808.  
  3809. ;
  3810. ;    ↑vram(192*144) trans
  3811. ;
  3812.  
  3813. ;    v02用ルーチン
  3814. ;int v02_trans_192_9600( char *snd_buf, int snd_counter 
  3815. ;              char *grf_buf, int grf_counter, int grf_wait
  3816. ;              int count_start, 
  3817. ;              char *table1, char *table2, char *work
  3818. ;            )
  3819. ;snd sampling freq=9600
  3820.  
  3821.     public    v02_trans_192_9600
  3822.     db    'v02_trans_192_9600',18
  3823. v02_trans_192_9600    proc    near
  3824.     push    ebp
  3825.     mov    ebp,esp
  3826.     push    esi
  3827.     push    edi
  3828.     push    ebx
  3829.  
  3830.     push    eax        ; work
  3831.  
  3832.     cli                    ;Int disable
  3833.     cld
  3834.  
  3835. #vdwt0:    mov    al,30        ; フィールドが1から0に変わる瞬間まで待つ
  3836.     mov    edx,0440h    ; この瞬間からタイミングを考慮して
  3837.     out    dx,al        ; 総合的にstart_countを決める必要がある
  3838.     mov    edx,0442h
  3839.     in    ax,dx
  3840.     test    eax,0800h
  3841.     je    #vdwt0
  3842. #vdwt1:    mov    al,30
  3843.     mov    edx,0440h
  3844.     out    dx,al
  3845.     mov    edx,0442h
  3846.     in    ax,dx
  3847.     test    eax,0800h
  3848.     jne    #vdwt1
  3849.  
  3850.     mov    edi,[ebp].SND_BUF
  3851.     mov    ecx,[ebp].SND_COUNTER
  3852.     cmp    ecx,0
  3853.     je    #vd_E
  3854.  
  3855.     mov    ax,10ch
  3856.     mov    fs,ax
  3857.     xor    eax,eax
  3858.     xor    ebx,ebx
  3859.  
  3860. #vd000:    mov    edx,04e8h
  3861.     in    al,dx
  3862.     test    al,1
  3863.     jne    short #vd001
  3864.     call    v02_snd_192
  3865.     jmp    short #vd000
  3866. #vd001:    mov    edx,04e7h
  3867.     in    al,dx
  3868.     mov    [esp],eax
  3869.     inc    dword ptr [ebp].COUNTER_START
  3870.  
  3871. #vd010:    mov    edx,04e8h
  3872.     in    al,dx
  3873.     test    al,1
  3874.     jne    short #vd011
  3875.     call    v02_snd_192
  3876.     jmp    short #vd010
  3877. #vd011:    mov    edx,04e7h
  3878.     in    al,dx
  3879.     add    eax,[esp]
  3880.     shr    eax,1
  3881.     stosb
  3882.     inc    dword ptr [ebp].COUNTER_START
  3883.     dec    ecx
  3884.     je    #vd_E
  3885.  
  3886.     jmp    #vd000
  3887.  
  3888. #vd_E:    call    v02_snd_192
  3889.     inc    dword ptr [ebp].COUNTER_START
  3890.     cmp    dword ptr [ebp].GRF_COUNTER,0
  3891.     jg    #vd_E
  3892. #vd_E1:    call    v02_snd_192
  3893.     inc    dword ptr [ebp].COUNTER_START
  3894.     or    ebx,ebx
  3895.     jne    #vd_E1
  3896.  
  3897.     sti
  3898.  
  3899.     pop    eax        ; work
  3900.     xor    eax,eax
  3901.     pop    ebx
  3902.     pop    edi
  3903.     pop    esi
  3904.     mov    esp,ebp
  3905.     pop    ebp
  3906.     ret
  3907. v02_trans_192_9600    endp
  3908.  
  3909. ;    v02用ルーチン
  3910. ;int v02_trans_192_19200( char *snd_buf, int snd_counter 
  3911. ;              char *grf_buf, int grf_counter, int grf_wait
  3912. ;              int count_start, 
  3913. ;              char *table1, char *table2, char *work
  3914. ;            )
  3915. ;snd sampling freq=19200
  3916.  
  3917.     public    v02_trans_192_19200
  3918.     db    'v02_trans_192_19200',19
  3919. v02_trans_192_19200    proc    near
  3920.     push    ebp
  3921.     mov    ebp,esp
  3922.     push    esi
  3923.     push    edi
  3924.     push    ebx
  3925.  
  3926.     cli                    ;Int disable
  3927.     cld
  3928.  
  3929. #vdwt0:    mov    al,30        ; フィールドが1から0に変わる瞬間まで待つ
  3930.     mov    edx,0440h    ; この瞬間からタイミングを考慮して
  3931.     out    dx,al        ; 総合的にstart_countを決める必要がある
  3932.     mov    edx,0442h
  3933.     in    ax,dx
  3934.     test    eax,0800h
  3935.     je    #vdwt0
  3936. #vdwt1:    mov    al,30
  3937.     mov    edx,0440h
  3938.     out    dx,al
  3939.     mov    edx,0442h
  3940.     in    ax,dx
  3941.     test    eax,0800h
  3942.     jne    #vdwt1
  3943.  
  3944.     mov    edi,[ebp].SND_BUF
  3945.     mov    ecx,[ebp].SND_COUNTER
  3946.     cmp    ecx,0
  3947.     je    #vd_E
  3948.  
  3949.     mov    ax,10ch
  3950.     mov    fs,ax
  3951.     xor    eax,eax
  3952.     xor    ebx,ebx
  3953.  
  3954. #vd000:    mov    edx,04e8h
  3955.     in    al,dx
  3956.     test    al,1
  3957.     jne    short #vd001
  3958.     call    v02_snd_192
  3959.     jmp    short #vd000
  3960. #vd001:    mov    edx,04e7h
  3961.     in    al,dx
  3962.     stosb
  3963.     inc    dword ptr [ebp].COUNTER_START
  3964.     dec    ecx
  3965.     jne    #vd000
  3966.  
  3967. #vd_E:    call    v02_snd_192
  3968.     inc    dword ptr [ebp].COUNTER_START
  3969.     cmp    dword ptr [ebp].GRF_COUNTER,0
  3970.     jg    #vd_E
  3971. #vd_E1:    call    v02_snd_192
  3972.     inc    dword ptr [ebp].COUNTER_START
  3973.     or    ebx,ebx
  3974.     jne    #vd_E1
  3975.  
  3976.     sti
  3977.  
  3978.     xor    eax,eax
  3979.     pop    ebx
  3980.     pop    edi
  3981.     pop    esi
  3982.     mov    esp,ebp
  3983.     pop    ebp
  3984.     ret
  3985. v02_trans_192_19200    endp
  3986.  
  3987.  
  3988. ;int v02_snd_trans_256_4( char *snd_buf, int snd_counter 
  3989. ;              char *grf_buf, int grf_counter, int grf_wait
  3990. ;              int count_start, 
  3991. ;              char *table1, char *table2, char *work
  3992. ;            )
  3993. ;snd sampling freq=12000
  3994.  
  3995.     public    v02_snd_trans_256_4
  3996.     db    'v02_snd_trans_256_4',19
  3997. v02_snd_trans_256_4    proc    near
  3998.     push    ebp
  3999.     mov    ebp,esp
  4000.     push    esi
  4001.     push    edi
  4002.     push    ebx
  4003.  
  4004.     push    eax        ; work
  4005.  
  4006.     cli                    ;Int disable
  4007.     cld
  4008.  
  4009. #vdwt0:    mov    al,30        ; フィールドが1から0に変わる瞬間まで待つ
  4010.     mov    edx,0440h    ; この瞬間からタイミングを考慮して
  4011.     out    dx,al        ; 総合的にstart_countを決める必要がある
  4012.     mov    edx,0442h
  4013.     in    ax,dx
  4014.     test    eax,0800h
  4015.     je    #vdwt0
  4016. #vdwt1:    mov    al,30
  4017.     mov    edx,0440h
  4018.     out    dx,al
  4019.     mov    edx,0442h
  4020.     in    ax,dx
  4021.     test    eax,0800h
  4022.     jne    #vdwt1
  4023.  
  4024.     mov    edi,[ebp].SND_BUF
  4025.     mov    ecx,[ebp].SND_COUNTER
  4026.     cmp    ecx,0
  4027.     je    #vd_E
  4028.  
  4029.     mov    ax,10ch
  4030.     mov    fs,ax
  4031.     xor    eax,eax
  4032.     xor    ebx,ebx
  4033.  
  4034. #vd000:    mov    edx,04e8h
  4035.     in    al,dx
  4036.     test    al,1
  4037.     jne    short #vd001
  4038.     call    v02_snd_256
  4039.     jmp    short #vd000
  4040. #vd001:    mov    edx,04e7h
  4041.     in    al,dx
  4042.     stosb
  4043.     inc    dword ptr [ebp].COUNTER_START
  4044.     dec    ecx
  4045.     je    #vd_E
  4046.  
  4047. #vd010:    mov    edx,04e8h
  4048.     in    al,dx
  4049.     test    al,1
  4050.     jne    short #vd011
  4051.     call    v02_snd_256
  4052.     jmp    short #vd010
  4053. #vd011:    mov    edx,04e7h
  4054.     in    al,dx
  4055.     inc    dword ptr [ebp].COUNTER_START
  4056.  
  4057. #vd020:    mov    edx,04e8h
  4058.     in    al,dx
  4059.     test    al,1
  4060.     jne    short #vd021
  4061.     call    v02_snd_256
  4062.     jmp    short #vd020
  4063. #vd021:    mov    edx,04e7h
  4064.     in    al,dx
  4065.     stosb
  4066.     inc    dword ptr [ebp].COUNTER_START
  4067.     dec    ecx
  4068.     je    #vd_E
  4069.  
  4070. #vd030:    mov    edx,04e8h
  4071.     in    al,dx
  4072.     test    al,1
  4073.     jne    short #vd031
  4074.     call    v02_snd_256
  4075.     jmp    short #vd030
  4076. #vd031:    mov    edx,04e7h
  4077.     in    al,dx
  4078.     mov    [esp],eax
  4079.     inc    dword ptr [ebp].COUNTER_START
  4080.  
  4081. #vd040:    mov    edx,04e8h
  4082.     in    al,dx
  4083.     test    al,1
  4084.     jne    short #vd041
  4085.     call    v02_snd_256
  4086.     jmp    short #vd040
  4087. #vd041:    mov    edx,04e7h
  4088.     in    al,dx
  4089.     add    eax,[esp]
  4090.     shr    eax,1
  4091.     stosb
  4092.     inc    dword ptr [ebp].COUNTER_START
  4093.     dec    ecx
  4094.     je    #vd_E
  4095.  
  4096. #vd050:    mov    edx,04e8h
  4097.     in    al,dx
  4098.     test    al,1
  4099.     jne    short #vd051
  4100.     call    v02_snd_256
  4101.     jmp    short #vd050
  4102. #vd051:    mov    edx,04e7h
  4103.     in    al,dx
  4104.     stosb
  4105.     inc    dword ptr [ebp].COUNTER_START
  4106.     dec    ecx
  4107.     je    #vd_E
  4108.  
  4109. #vd060:    mov    edx,04e8h
  4110.     in    al,dx
  4111.     test    al,1
  4112.     jne    short #vd061
  4113.     call    v02_snd_256
  4114.     jmp    short #vd060
  4115. #vd061:    mov    edx,04e7h
  4116.     in    al,dx
  4117.     mov    [esp],eax
  4118.     inc    dword ptr [ebp].COUNTER_START
  4119.  
  4120. #vd070:    mov    edx,04e8h
  4121.     in    al,dx
  4122.     test    al,1
  4123.     jne    short #vd071
  4124.     call    v02_snd_256
  4125.     jmp    short #vd070
  4126. #vd071:    mov    edx,04e7h
  4127.     in    al,dx
  4128.     add    eax,[esp]
  4129.     shr    eax,1
  4130.     stosb
  4131.     inc    dword ptr [ebp].COUNTER_START
  4132.     dec    ecx
  4133.     je    #vd_E
  4134.  
  4135.     jmp    #vd000
  4136.  
  4137. #vd_E:    call    v02_snd_256
  4138.     inc    dword ptr [ebp].COUNTER_START
  4139.     cmp    dword ptr [ebp].GRF_COUNTER,0
  4140.     jg    #vd_E
  4141. #vd_E1:    call    v02_snd_256
  4142.     inc    dword ptr [ebp].COUNTER_START
  4143.     or    ebx,ebx
  4144.     jne    #vd_E1
  4145.  
  4146.     sti
  4147.  
  4148.     pop    eax        ; work
  4149.     xor    eax,eax
  4150.     pop    ebx
  4151.     pop    edi
  4152.     pop    esi
  4153.     mov    esp,ebp
  4154.     pop    ebp
  4155.     ret
  4156. v02_snd_trans_256_4    endp
  4157.  
  4158. ;int v02_snd_trans_256_5( char *snd_buf, int snd_counter 
  4159. ;              char *grf_buf, int grf_counter, int grf_wait
  4160. ;              int count_start, 
  4161. ;              char *table1, char *table2, char *work
  4162. ;            )
  4163. ;snd sampling freq=9200
  4164.  
  4165.     public    v02_snd_trans_256_5
  4166.     db    'v02_snd_trans_256_5',19
  4167. v02_snd_trans_256_5    proc    near
  4168.     push    ebp
  4169.     mov    ebp,esp
  4170.     push    esi
  4171.     push    edi
  4172.     push    ebx
  4173.  
  4174.     push    eax        ; work
  4175.  
  4176.     cli                    ;Int disable
  4177.     cld
  4178.  
  4179. #vdwt0:    mov    al,30        ; フィールドが1から0に変わる瞬間まで待つ
  4180.     mov    edx,0440h    ; この瞬間からタイミングを考慮して
  4181.     out    dx,al        ; 総合的にstart_countを決める必要がある
  4182.     mov    edx,0442h
  4183.     in    ax,dx
  4184.     test    eax,0800h
  4185.     je    #vdwt0
  4186. #vdwt1:    mov    al,30
  4187.     mov    edx,0440h
  4188.     out    dx,al
  4189.     mov    edx,0442h
  4190.     in    ax,dx
  4191.     test    eax,0800h
  4192.     jne    #vdwt1
  4193.  
  4194.     mov    edi,[ebp].SND_BUF
  4195.     mov    ecx,[ebp].SND_COUNTER
  4196.     cmp    ecx,0
  4197.     je    #vd_E
  4198.  
  4199.     mov    ax,10ch
  4200.     mov    fs,ax
  4201.     xor    eax,eax
  4202.     xor    ebx,ebx
  4203.  
  4204. #vd000:    mov    edx,04e8h
  4205.     in    al,dx
  4206.     test    al,1
  4207.     jne    short #vd001
  4208.     call    v02_snd_256
  4209.     jmp    short #vd000
  4210. #vd001:    mov    edx,04e7h
  4211.     in    al,dx
  4212.     mov    [esp],eax
  4213.     inc    dword ptr [ebp].COUNTER_START
  4214.  
  4215. #vd010:    mov    edx,04e8h
  4216.     in    al,dx
  4217.     test    al,1
  4218.     jne    short #vd011
  4219.     call    v02_snd_256
  4220.     jmp    short #vd010
  4221. #vd011:    mov    edx,04e7h
  4222.     in    al,dx
  4223.     add    eax,[esp]
  4224.     shr    eax,1
  4225.     stosb
  4226.     inc    dword ptr [ebp].COUNTER_START
  4227.     dec    ecx
  4228.     je    #vd_E
  4229.  
  4230.     jmp    #vd000
  4231.  
  4232. #vd_E:    call    v02_snd_256
  4233.     inc    dword ptr [ebp].COUNTER_START
  4234.     cmp    dword ptr [ebp].GRF_COUNTER,0
  4235.     jg    #vd_E
  4236. #vd_E1:    call    v02_snd_256
  4237.     inc    dword ptr [ebp].COUNTER_START
  4238.     or    ebx,ebx
  4239.     jne    #vd_E1
  4240.  
  4241.     sti
  4242.  
  4243.     pop    eax        ; work
  4244.     xor    eax,eax
  4245.     pop    ebx
  4246.     pop    edi
  4247.     pop    esi
  4248.     mov    esp,ebp
  4249.     pop    ebp
  4250.     ret
  4251. v02_snd_trans_256_5    endp
  4252.  
  4253. ;int v02_snd_trans_256_6( char *snd_buf, int snd_counter 
  4254. ;              char *grf_buf, int grf_counter, int grf_wait
  4255. ;              int count_start, 
  4256. ;              char *table1, char *table2, char *work
  4257. ;            )
  4258. ;snd sampling freq=8000
  4259.  
  4260.     public    v02_snd_trans_256_6
  4261.     db    'v02_snd_trans_256_6',19
  4262. v02_snd_trans_256_6    proc    near
  4263.     push    ebp
  4264.     mov    ebp,esp
  4265.     push    esi
  4266.     push    edi
  4267.     push    ebx
  4268.  
  4269.     push    eax        ; work
  4270.  
  4271.     cli                    ;Int disable
  4272.     cld
  4273.  
  4274. #vdwt0:    mov    al,30        ; フィールドが1から0に変わる瞬間まで待つ
  4275.     mov    edx,0440h    ; この瞬間からタイミングを考慮して
  4276.     out    dx,al        ; 総合的にstart_countを決める必要がある
  4277.     mov    edx,0442h
  4278.     in    ax,dx
  4279.     test    eax,0800h
  4280.     je    #vdwt0
  4281. #vdwt1:    mov    al,30
  4282.     mov    edx,0440h
  4283.     out    dx,al
  4284.     mov    edx,0442h
  4285.     in    ax,dx
  4286.     test    eax,0800h
  4287.     jne    #vdwt1
  4288.  
  4289.     mov    edi,[ebp].SND_BUF
  4290.     mov    ecx,[ebp].SND_COUNTER
  4291.     cmp    ecx,0
  4292.     je    #vd_E
  4293.  
  4294.     mov    ax,10ch
  4295.     mov    fs,ax
  4296.     xor    eax,eax
  4297.     xor    ebx,ebx
  4298.  
  4299. #vd000:    mov    edx,04e8h
  4300.     in    al,dx
  4301.     test    al,1
  4302.     jne    short #vd001
  4303.     call    v02_snd_256
  4304.     jmp    short #vd000
  4305. #vd001:    mov    edx,04e7h
  4306.     in    al,dx
  4307.     stosb
  4308.     inc    dword ptr [ebp].COUNTER_START
  4309.     dec    ecx
  4310.     je    #vd_E
  4311.  
  4312. #vd010:    mov    edx,04e8h
  4313.     in    al,dx
  4314.     test    al,1
  4315.     jne    short #vd011
  4316.     call    v02_snd_256
  4317.     jmp    short #vd010
  4318. #vd011:    mov    edx,04e7h
  4319.     in    al,dx
  4320.     inc    dword ptr [ebp].COUNTER_START
  4321.  
  4322. #vd020:    mov    edx,04e8h
  4323.     in    al,dx
  4324.     test    al,1
  4325.     jne    short #vd021
  4326.     call    v02_snd_256
  4327.     jmp    short #vd020
  4328. #vd021:    mov    edx,04e7h
  4329.     in    al,dx
  4330.     mov    [esp],eax
  4331.     inc    dword ptr [ebp].COUNTER_START
  4332.  
  4333. #vd030:    mov    edx,04e8h
  4334.     in    al,dx
  4335.     test    al,1
  4336.     jne    short #vd031
  4337.     call    v02_snd_256
  4338.     jmp    short #vd030
  4339. #vd031:    mov    edx,04e7h
  4340.     in    al,dx
  4341.     add    eax,[esp]
  4342.     shr    eax,1
  4343.     stosb
  4344.     inc    dword ptr [ebp].COUNTER_START
  4345.     dec    ecx
  4346.     je    #vd_E
  4347.  
  4348. #vd040:    mov    edx,04e8h
  4349.     in    al,dx
  4350.     test    al,1
  4351.     jne    short #vd041
  4352.     call    v02_snd_256
  4353.     jmp    short #vd040
  4354. #vd041:    mov    edx,04e7h
  4355.     in    al,dx
  4356.     inc    dword ptr [ebp].COUNTER_START
  4357.  
  4358. #vd050:    mov    edx,04e8h
  4359.     in    al,dx
  4360.     test    al,1
  4361.     jne    short #vd051
  4362.     call    v02_snd_256
  4363.     jmp    short #vd050
  4364. #vd051:    mov    edx,04e7h
  4365.     in    al,dx
  4366.     stosb
  4367.     inc    dword ptr [ebp].COUNTER_START
  4368.     dec    ecx
  4369.     je    #vd_E
  4370.  
  4371. #vd060:    mov    edx,04e8h
  4372.     in    al,dx
  4373.     test    al,1
  4374.     jne    short #vd061
  4375.     call    v02_snd_256
  4376.     jmp    short #vd060
  4377. #vd061:    mov    edx,04e7h
  4378.     in    al,dx
  4379.     inc    dword ptr [ebp].COUNTER_START
  4380.  
  4381. #vd070:    mov    edx,04e8h
  4382.     in    al,dx
  4383.     test    al,1
  4384.     jne    short #vd071
  4385.     call    v02_snd_256
  4386.     jmp    short #vd070
  4387. #vd071:    mov    edx,04e7h
  4388.     in    al,dx
  4389.     mov    [esp],eax
  4390.     inc    dword ptr [ebp].COUNTER_START
  4391.  
  4392. #vd080:    mov    edx,04e8h
  4393.     in    al,dx
  4394.     test    al,1
  4395.     jne    short #vd081
  4396.     call    v02_snd_256
  4397.     jmp    short #vd080
  4398. #vd081:    mov    edx,04e7h
  4399.     in    al,dx
  4400.     add    eax,[esp]
  4401.     shr    eax,1
  4402.     stosb
  4403.     inc    dword ptr [ebp].COUNTER_START
  4404.     dec    ecx
  4405.     je    #vd_E
  4406.  
  4407. #vd090:    mov    edx,04e8h
  4408.     in    al,dx
  4409.     test    al,1
  4410.     jne    short #vd091
  4411.     call    v02_snd_256
  4412.     jmp    short #vd090
  4413. #vd091:    mov    edx,04e7h
  4414.     in    al,dx
  4415.     inc    dword ptr [ebp].COUNTER_START
  4416.  
  4417. #vd100:    mov    edx,04e8h
  4418.     in    al,dx
  4419.     test    al,1
  4420.     jne    short #vd101
  4421.     call    v02_snd_256
  4422.     jmp    short #vd100
  4423. #vd101:    mov    edx,04e7h
  4424.     in    al,dx
  4425.     stosb
  4426.     inc    dword ptr [ebp].COUNTER_START
  4427.     dec    ecx
  4428.     je    #vd_E
  4429.  
  4430. #vd110:    mov    edx,04e8h
  4431.     in    al,dx
  4432.     test    al,1
  4433.     jne    short #vd111
  4434.     call    v02_snd_256
  4435.     jmp    short #vd110
  4436. #vd111:    mov    edx,04e7h
  4437.     in    al,dx
  4438.     inc    dword ptr [ebp].COUNTER_START
  4439.  
  4440.     jmp    #vd000
  4441.  
  4442. #vd_E:    call    v02_snd_256
  4443.     inc    dword ptr [ebp].COUNTER_START
  4444.     cmp    dword ptr [ebp].GRF_COUNTER,0
  4445.     jg    #vd_E
  4446. #vd_E1:    call    v02_snd_256
  4447.     inc    dword ptr [ebp].COUNTER_START
  4448.     or    ebx,ebx
  4449.     jne    #vd_E1
  4450.  
  4451.     sti
  4452.  
  4453.     pop    eax        ; work
  4454.     xor    eax,eax
  4455.     pop    ebx
  4456.     pop    edi
  4457.     pop    esi
  4458.     mov    esp,ebp
  4459.     pop    ebp
  4460.     ret
  4461. v02_snd_trans_256_6    endp
  4462.  
  4463. ;int v02_snd_trans_256_7( char *snd_buf, int snd_counter 
  4464. ;              char *grf_buf, int grf_counter, int grf_wait
  4465. ;              int count_start, 
  4466. ;              char *table1, char *table2, char *work
  4467. ;            )
  4468. ;snd sampling freq=6857
  4469.  
  4470.     public    v02_snd_trans_256_7
  4471.     db    'v02_snd_trans_256_7',19
  4472. v02_snd_trans_256_7    proc    near
  4473.     push    ebp
  4474.     mov    ebp,esp
  4475.     push    esi
  4476.     push    edi
  4477.     push    ebx
  4478.  
  4479.     push    eax        ; work
  4480.  
  4481.     cli                    ;Int disable
  4482.     cld
  4483.  
  4484. #vdwt0:    mov    al,30        ; フィールドが1から0に変わる瞬間まで待つ
  4485.     mov    edx,0440h    ; この瞬間からタイミングを考慮して
  4486.     out    dx,al        ; 総合的にstart_countを決める必要がある
  4487.     mov    edx,0442h
  4488.     in    ax,dx
  4489.     test    eax,0800h
  4490.     je    #vdwt0
  4491. #vdwt1:    mov    al,30
  4492.     mov    edx,0440h
  4493.     out    dx,al
  4494.     mov    edx,0442h
  4495.     in    ax,dx
  4496.     test    eax,0800h
  4497.     jne    #vdwt1
  4498.  
  4499.     mov    edi,[ebp].SND_BUF
  4500.     mov    ecx,[ebp].SND_COUNTER
  4501.     cmp    ecx,0
  4502.     je    #vd_E
  4503.  
  4504.     mov    ax,10ch
  4505.     mov    fs,ax
  4506.     xor    eax,eax
  4507.     xor    ebx,ebx
  4508.  
  4509. #vd000:    mov    edx,04e8h
  4510.     in    al,dx
  4511.     test    al,1
  4512.     jne    short #vd001
  4513.     call    v02_snd_256
  4514.     jmp    short #vd000
  4515. #vd001:    mov    edx,04e7h
  4516.     in    al,dx
  4517.     mov    [esp],eax
  4518.     inc    dword ptr [ebp].COUNTER_START
  4519.  
  4520. #vd010:    mov    edx,04e8h
  4521.     in    al,dx
  4522.     test    al,1
  4523.     jne    short #vd011
  4524.     call    v02_snd_256
  4525.     jmp    short #vd010
  4526. #vd011:    mov    edx,04e7h
  4527.     in    al,dx
  4528.     add    eax,[esp]
  4529.     shr    eax,1
  4530.     stosb
  4531.     inc    dword ptr [ebp].COUNTER_START
  4532.     dec    ecx
  4533.     je    #vd_E
  4534.  
  4535. #vd020:    mov    edx,04e8h
  4536.     in    al,dx
  4537.     test    al,1
  4538.     jne    short #vd021
  4539.     call    v02_snd_256
  4540.     jmp    short #vd020
  4541. #vd021:    mov    edx,04e7h
  4542.     in    al,dx
  4543.     inc    dword ptr [ebp].COUNTER_START
  4544.  
  4545. #vd030:    mov    edx,04e8h
  4546.     in    al,dx
  4547.     test    al,1
  4548.     jne    short #vd031
  4549.     call    v02_snd_256
  4550.     jmp    short #vd030
  4551. #vd031:    mov    edx,04e7h
  4552.     in    al,dx
  4553.     mov    [esp],eax
  4554.     inc    dword ptr [ebp].COUNTER_START
  4555.  
  4556. #vd040:    mov    edx,04e8h
  4557.     in    al,dx
  4558.     test    al,1
  4559.     jne    short #vd041
  4560.     call    v02_snd_256
  4561.     jmp    short #vd040
  4562. #vd041:    mov    edx,04e7h
  4563.     in    al,dx
  4564.     add    eax,[esp]
  4565.     shr    eax,1
  4566.     stosb
  4567.     inc    dword ptr [ebp].COUNTER_START
  4568.     dec    ecx
  4569.     je    #vd_E
  4570.  
  4571. #vd050:    mov    edx,04e8h
  4572.     in    al,dx
  4573.     test    al,1
  4574.     jne    short #vd051
  4575.     call    v02_snd_256
  4576.     jmp    short #vd050
  4577. #vd051:    mov    edx,04e7h
  4578.     in    al,dx
  4579.     inc    dword ptr [ebp].COUNTER_START
  4580.  
  4581. #vd060:    mov    edx,04e8h
  4582.     in    al,dx
  4583.     test    al,1
  4584.     jne    short #vd061
  4585.     call    v02_snd_256
  4586.     jmp    short #vd060
  4587. #vd061:    mov    edx,04e7h
  4588.     in    al,dx
  4589.     mov    [esp],eax
  4590.     inc    dword ptr [ebp].COUNTER_START
  4591.  
  4592. #vd070:    mov    edx,04e8h
  4593.     in    al,dx
  4594.     test    al,1
  4595.     jne    short #vd071
  4596.     call    v02_snd_256
  4597.     jmp    short #vd070
  4598. #vd071:    mov    edx,04e7h
  4599.     in    al,dx
  4600.     add    eax,[esp]
  4601.     shr    eax,1
  4602.     stosb
  4603.     inc    dword ptr [ebp].COUNTER_START
  4604.     dec    ecx
  4605.     je    #vd_E
  4606.  
  4607. #vd080:    mov    edx,04e8h
  4608.     in    al,dx
  4609.     test    al,1
  4610.     jne    short #vd081
  4611.     call    v02_snd_256
  4612.     jmp    short #vd080
  4613. #vd081:    mov    edx,04e7h
  4614.     in    al,dx
  4615.     inc    dword ptr [ebp].COUNTER_START
  4616.  
  4617. #vd090:    mov    edx,04e8h
  4618.     in    al,dx
  4619.     test    al,1
  4620.     jne    short #vd091
  4621.     call    v02_snd_256
  4622.     jmp    short #vd090
  4623. #vd091:    mov    edx,04e7h
  4624.     in    al,dx
  4625.     mov    [esp],eax
  4626.     inc    dword ptr [ebp].COUNTER_START
  4627.  
  4628. #vd100:    mov    edx,04e8h
  4629.     in    al,dx
  4630.     test    al,1
  4631.     jne    short #vd101
  4632.     call    v02_snd_256
  4633.     jmp    short #vd100
  4634. #vd101:    mov    edx,04e7h
  4635.     in    al,dx
  4636.     add    eax,[esp]
  4637.     shr    eax,1
  4638.     stosb
  4639.     inc    dword ptr [ebp].COUNTER_START
  4640.     dec    ecx
  4641.     je    #vd_E
  4642.  
  4643. #vd110:    mov    edx,04e8h
  4644.     in    al,dx
  4645.     test    al,1
  4646.     jne    short #vd111
  4647.     call    v02_snd_256
  4648.     jmp    short #vd110
  4649. #vd111:    mov    edx,04e7h
  4650.     in    al,dx
  4651.     inc    dword ptr [ebp].COUNTER_START
  4652.  
  4653. #vd120:    mov    edx,04e8h
  4654.     in    al,dx
  4655.     test    al,1
  4656.     jne    short #vd121
  4657.     call    v02_snd_256
  4658.     jmp    short #vd120
  4659. #vd121:    mov    edx,04e7h
  4660.     in    al,dx
  4661.     mov    [esp],eax
  4662.     inc    dword ptr [ebp].COUNTER_START
  4663.  
  4664. #vd130:    mov    edx,04e8h
  4665.     in    al,dx
  4666.     test    al,1
  4667.     jne    short #vd131
  4668.     call    v02_snd_256
  4669.     jmp    short #vd130
  4670. #vd131:    mov    edx,04e7h
  4671.     in    al,dx
  4672.     add    eax,[esp]
  4673.     shr    eax,1
  4674.     stosb
  4675.     inc    dword ptr [ebp].COUNTER_START
  4676.     dec    ecx
  4677.     je    #vd_E
  4678.  
  4679.     jmp    #vd000
  4680.  
  4681. #vd_E:    call    v02_snd_256
  4682.     inc    dword ptr [ebp].COUNTER_START
  4683.     cmp    dword ptr [ebp].GRF_COUNTER,0
  4684.     jg    #vd_E
  4685. #vd_E1:    call    v02_snd_256
  4686.     inc    dword ptr [ebp].COUNTER_START
  4687.     or    ebx,ebx
  4688.     jne    #vd_E1
  4689.  
  4690.     sti
  4691.  
  4692.     pop    eax        ; work
  4693.     xor    eax,eax
  4694.     pop    ebx
  4695.     pop    edi
  4696.     pop    esi
  4697.     mov    esp,ebp
  4698.     pop    ebp
  4699.     ret
  4700. v02_snd_trans_256_7    endp
  4701.  
  4702. ;
  4703. ;    ↓vram(256*192) trans
  4704. ;
  4705.  
  4706. DIV256_1    equ    2
  4707. DIV256_2    equ    2
  4708.  
  4709. v02_snd_256    proc    near
  4710.     push    eax
  4711.     push    ecx
  4712.     push    edi
  4713.     or    ebx,ebx
  4714.     jne    #vd01
  4715.  
  4716.     cmp    dword ptr [ebp].GRF_COUNTER,0
  4717.     jle    #vd10
  4718.     mov    eax,[ebp].GRF_WAIT
  4719.     cmp    eax,[ebp].COUNTER_START
  4720.     jg    #vd10
  4721.  
  4722.     push    eax
  4723.     mov    al,30
  4724.     mov    edx,0440h
  4725.     out    dx,al
  4726.     mov    edx,0442h
  4727.     in    ax,dx
  4728.     test    eax,0800h
  4729.     pop    eax
  4730.     je    #vd10
  4731.  
  4732.     sub    [ebp].COUNTER_START,eax
  4733.  
  4734.     mov    edi,[ebp].WK_AREA
  4735.     mov    esi,64+1024*2*24
  4736.     mov    ecx,128/DIV256_1            ; vram 転送
  4737.     rep    movs dword ptr [edi],fs:[esi]
  4738.     mov    ds:v02_digit_wk,edi
  4739.     dec    dword ptr [ebp].GRF_COUNTER
  4740.     inc    ebx
  4741.     jmp    #vd10
  4742.  
  4743. #vd01:    cmp    ebx,192*DIV256_1
  4744.     je    short #vd03
  4745.     ja    #vd05
  4746.     mov    edi,ds:v02_digit_wk
  4747.     mov    ecx,128/DIV256_1            ; vram 転送
  4748.     rep    movs dword ptr [edi],fs:[esi]
  4749.     mov    ds:v02_digit_wk,edi
  4750.     inc    ebx
  4751.     test    ebx,DIV256_1-1
  4752.     jne    #vd10
  4753.     add    esi,1024*2-512
  4754. #vd02:    jmp    #vd10
  4755.  
  4756. #vd03:    push    ebp
  4757.     push    ebx
  4758.     mov    edi,[ebp].GRF_BUF
  4759.     mov    esi,[ebp].WK_AREA
  4760.     mov    ebp,[ebp].Y_TABLE
  4761.     xor    edx,edx
  4762.     mov    ecx,32/DIV256_2
  4763. #vd04:    lodsd
  4764.     mov    dx,ax
  4765.     shr    eax,16
  4766.     mov    dl,ds:[edx][ebp]
  4767.     mov    dh,ds:[eax][ebp]
  4768.     mov    bl,ds:[edx][ebp].32768
  4769.     lodsd
  4770.     mov    dx,ax
  4771.     shr    eax,16
  4772.     mov    dl,ds:[edx][ebp]
  4773.     mov    dh,ds:[eax][ebp]
  4774.     mov    bh,ds:[edx][ebp].32768
  4775.  
  4776.     shl    ebx,16
  4777.  
  4778.     lodsd
  4779.     mov    dx,ax
  4780.     shr    eax,16
  4781.     mov    dl,ds:[edx][ebp]
  4782.     mov    dh,ds:[eax][ebp]
  4783.     mov    bl,ds:[edx][ebp].32768
  4784.     lodsd
  4785.     mov    dx,ax
  4786.     shr    eax,16
  4787.     mov    dl,ds:[edx][ebp]
  4788.     mov    dh,ds:[eax][ebp]
  4789.     mov    bh,ds:[edx][ebp].32768
  4790.  
  4791.     rol    ebx,16
  4792.     mov    eax,ebx
  4793.     stosd
  4794.     loop    #vd04
  4795.  
  4796.     pop    ebx
  4797.     pop    ebp
  4798.     mov    [ebp].GRF_BUF,edi
  4799.     inc    ebx
  4800.     jmp    #vd10
  4801.  
  4802. #vd05:    cmp    ebx,192*DIV256_1+192*DIV256_2
  4803.     je    short #vd07
  4804.     ja    short #vd08
  4805.     push    ebp
  4806.     push    ebx
  4807.     mov    edi,[ebp].GRF_BUF
  4808.     mov    ebp,[ebp].Y_TABLE
  4809.     xor    edx,edx
  4810.     mov    ecx,32/DIV256_2
  4811. #vd06:    lodsd
  4812.     mov    dx,ax
  4813.     shr    eax,16
  4814.     mov    dl,ds:[edx][ebp]
  4815.     mov    dh,ds:[eax][ebp]
  4816.     mov    bl,ds:[edx][ebp].32768
  4817.     lodsd
  4818.     mov    dx,ax
  4819.     shr    eax,16
  4820.     mov    dl,ds:[edx][ebp]
  4821.     mov    dh,ds:[eax][ebp]
  4822.     mov    bh,ds:[edx][ebp].32768
  4823.  
  4824.     shl    ebx,16
  4825.  
  4826.     lodsd
  4827.     mov    dx,ax
  4828.     shr    eax,16
  4829.     mov    dl,ds:[edx][ebp]
  4830.     mov    dh,ds:[eax][ebp]
  4831.     mov    bl,ds:[edx][ebp].32768
  4832.     lodsd
  4833.     mov    dx,ax
  4834.     shr    eax,16
  4835.     mov    dl,ds:[edx][ebp]
  4836.     mov    dh,ds:[eax][ebp]
  4837.     mov    bh,ds:[edx][ebp].32768
  4838.  
  4839.     rol    ebx,16
  4840.     mov    eax,ebx
  4841.     stosd
  4842.     loop    #vd06
  4843.  
  4844.     pop    ebx
  4845.     pop    ebp
  4846.     mov    [ebp].GRF_BUF,edi
  4847.     inc    ebx
  4848.     jmp    #vd10
  4849.  
  4850. #vd07:    mov    esi,[ebp].WK_AREA
  4851. #vd08:    push    ebp
  4852.     push    ebx
  4853.     mov    edi,[ebp].GRF_BUF
  4854.     mov    ebp,[ebp].C_TABLE
  4855.     mov    edx,0000ffffh
  4856.     mov    ecx,32/DIV256_2
  4857.  
  4858. #vd09:    lodsd
  4859.     and    eax,0000ffffh
  4860.     mov    bl,ds:[eax][ebp]
  4861.     lodsd
  4862.     and    eax,0000ffffh
  4863.     mov    bh,ds:[eax][ebp]
  4864.  
  4865.     shl    ebx,16
  4866.  
  4867.     lodsd
  4868.     and    eax,0000ffffh
  4869.     mov    bl,ds:[eax][ebp]
  4870.     lodsd
  4871.     and    eax,0000ffffh
  4872.     mov    bh,ds:[eax][ebp]
  4873.  
  4874.     rol    ebx,16
  4875.     mov    eax,ebx
  4876.     stosd
  4877.     loop    #vd09
  4878.  
  4879.     pop    ebx
  4880.     pop    ebp
  4881.     mov    [ebp].GRF_BUF,edi
  4882.     inc    ebx
  4883.     test    ebx,DIV256_2-1
  4884.     jne    short #vd0A
  4885.     add    esi,256*2
  4886. #vd0A:    cmp    ebx,192*DIV256_1+192*DIV256_2+96*DIV256_2
  4887.     jne    short #vd10
  4888.     xor    ebx,ebx
  4889.  
  4890. #vd10:    pop    edi
  4891.     pop    ecx
  4892.     pop    eax
  4893.     ret
  4894. v02_snd_256    endp
  4895.  
  4896. ;
  4897. ;    ↑vram(256*192) trans
  4898. ;
  4899.  
  4900. ;    v02用ルーチン
  4901. ;int v02_trans_256_9600( char *snd_buf, int snd_counter 
  4902. ;              char *grf_buf, int grf_counter, int grf_wait
  4903. ;              int count_start, 
  4904. ;              char *table1, char *table2, char *work
  4905. ;            )
  4906. ;snd sampling freq=9600
  4907.  
  4908.     public    v02_trans_256_9600
  4909.     db    'v02_trans_256_9600',18
  4910. v02_trans_256_9600    proc    near
  4911.     push    ebp
  4912.     mov    ebp,esp
  4913.     push    esi
  4914.     push    edi
  4915.     push    ebx
  4916.  
  4917.     push    eax        ; work
  4918.  
  4919.     cli                    ;Int disable
  4920.     cld
  4921.  
  4922. #vdwt0:    mov    al,30        ; フィールドが1から0に変わる瞬間まで待つ
  4923.     mov    edx,0440h    ; この瞬間からタイミングを考慮して
  4924.     out    dx,al        ; 総合的にstart_countを決める必要がある
  4925.     mov    edx,0442h
  4926.     in    ax,dx
  4927.     test    eax,0800h
  4928.     je    #vdwt0
  4929. #vdwt1:    mov    al,30
  4930.     mov    edx,0440h
  4931.     out    dx,al
  4932.     mov    edx,0442h
  4933.     in    ax,dx
  4934.     test    eax,0800h
  4935.     jne    #vdwt1
  4936.  
  4937.     mov    edi,[ebp].SND_BUF
  4938.     mov    ecx,[ebp].SND_COUNTER
  4939.     cmp    ecx,0
  4940.     je    #vd_E
  4941.  
  4942.     mov    ax,10ch
  4943.     mov    fs,ax
  4944.     xor    eax,eax
  4945.     xor    ebx,ebx
  4946.  
  4947. #vd000:    mov    edx,04e8h
  4948.     in    al,dx
  4949.     test    al,1
  4950.     jne    short #vd001
  4951.     call    v02_snd_256
  4952.     jmp    short #vd000
  4953. #vd001:    mov    edx,04e7h
  4954.     in    al,dx
  4955.     mov    [esp],eax
  4956.     inc    dword ptr [ebp].COUNTER_START
  4957.  
  4958. #vd010:    mov    edx,04e8h
  4959.     in    al,dx
  4960.     test    al,1
  4961.     jne    short #vd011
  4962.     call    v02_snd_256
  4963.     jmp    short #vd010
  4964. #vd011:    mov    edx,04e7h
  4965.     in    al,dx
  4966.     add    eax,[esp]
  4967.     shr    eax,1
  4968.     stosb
  4969.     inc    dword ptr [ebp].COUNTER_START
  4970.     dec    ecx
  4971.     je    #vd_E
  4972.  
  4973.     jmp    #vd000
  4974.  
  4975. #vd_E:    call    v02_snd_256
  4976.     inc    dword ptr [ebp].COUNTER_START
  4977.     cmp    dword ptr [ebp].GRF_COUNTER,0
  4978.     jg    #vd_E
  4979. #vd_E1:    call    v02_snd_256
  4980.     inc    dword ptr [ebp].COUNTER_START
  4981.     or    ebx,ebx
  4982.     jne    #vd_E1
  4983.  
  4984.     sti
  4985.  
  4986.     pop    eax        ; work
  4987.     xor    eax,eax
  4988.     pop    ebx
  4989.     pop    edi
  4990.     pop    esi
  4991.     mov    esp,ebp
  4992.     pop    ebp
  4993.     ret
  4994. v02_trans_256_9600    endp
  4995.  
  4996. ;    v02用ルーチン
  4997. ;int v02_trans_256_19200( char *snd_buf, int snd_counter 
  4998. ;              char *grf_buf, int grf_counter, int grf_wait
  4999. ;              int count_start, 
  5000. ;              char *table1, char *table2, char *work
  5001. ;            )
  5002. ;snd sampling freq=19200
  5003.  
  5004.     public    v02_trans_256_19200
  5005.     db    'v02_trans_256_19200',19
  5006. v02_trans_256_19200    proc    near
  5007.     push    ebp
  5008.     mov    ebp,esp
  5009.     push    esi
  5010.     push    edi
  5011.     push    ebx
  5012.  
  5013.     cli                    ;Int disable
  5014.     cld
  5015.  
  5016. #vdwt0:    mov    al,30        ; フィールドが1から0に変わる瞬間まで待つ
  5017.     mov    edx,0440h    ; この瞬間からタイミングを考慮して
  5018.     out    dx,al        ; 総合的にstart_countを決める必要がある
  5019.     mov    edx,0442h
  5020.     in    ax,dx
  5021.     test    eax,0800h
  5022.     je    #vdwt0
  5023. #vdwt1:    mov    al,30
  5024.     mov    edx,0440h
  5025.     out    dx,al
  5026.     mov    edx,0442h
  5027.     in    ax,dx
  5028.     test    eax,0800h
  5029.     jne    #vdwt1
  5030.  
  5031.     mov    edi,[ebp].SND_BUF
  5032.     mov    ecx,[ebp].SND_COUNTER
  5033.     cmp    ecx,0
  5034.     je    #vd_E
  5035.  
  5036.     mov    ax,10ch
  5037.     mov    fs,ax
  5038.     xor    eax,eax
  5039.     xor    ebx,ebx
  5040.  
  5041. #vd000:    mov    edx,04e8h
  5042.     in    al,dx
  5043.     test    al,1
  5044.     jne    short #vd001
  5045.     call    v02_snd_256
  5046.     jmp    short #vd000
  5047. #vd001:    mov    edx,04e7h
  5048.     in    al,dx
  5049.     stosb
  5050.     inc    dword ptr [ebp].COUNTER_START
  5051.     dec    ecx
  5052.     jne    #vd000
  5053.  
  5054. #vd_E:    call    v02_snd_256
  5055.     inc    dword ptr [ebp].COUNTER_START
  5056.     cmp    dword ptr [ebp].GRF_COUNTER,0
  5057.     jg    #vd_E
  5058. #vd_E1:    call    v02_snd_256
  5059.     inc    dword ptr [ebp].COUNTER_START
  5060.     or    ebx,ebx
  5061.     jne    #vd_E1
  5062.  
  5063.     sti
  5064.  
  5065.     xor    eax,eax
  5066.     pop    ebx
  5067.     pop    edi
  5068.     pop    esi
  5069.     mov    esp,ebp
  5070.     pop    ebp
  5071.     ret
  5072. v02_trans_256_19200    endp
  5073.  
  5074.  
  5075.  
  5076.  
  5077. ;int v02_snd_trans_320_4( char *snd_buf, int snd_counter 
  5078. ;              char *grf_buf, int grf_counter, int grf_wait
  5079. ;              int count_start, 
  5080. ;              char *table1, char *table2, char *work
  5081. ;            )
  5082. ;snd sampling freq=12000
  5083.  
  5084.     public    v02_snd_trans_320_4
  5085.     db    'v02_snd_trans_320_4',19
  5086. v02_snd_trans_320_4    proc    near
  5087.     push    ebp
  5088.     mov    ebp,esp
  5089.     push    esi
  5090.     push    edi
  5091.     push    ebx
  5092.  
  5093.     push    eax        ; work
  5094.  
  5095.     cli                    ;Int disable
  5096.     cld
  5097.  
  5098. #vdwt0:    mov    al,30        ; フィールドが1から0に変わる瞬間まで待つ
  5099.     mov    edx,0440h    ; この瞬間からタイミングを考慮して
  5100.     out    dx,al        ; 総合的にstart_countを決める必要がある
  5101.     mov    edx,0442h
  5102.     in    ax,dx
  5103.     test    eax,0800h
  5104.     je    #vdwt0
  5105. #vdwt1:    mov    al,30
  5106.     mov    edx,0440h
  5107.     out    dx,al
  5108.     mov    edx,0442h
  5109.     in    ax,dx
  5110.     test    eax,0800h
  5111.     jne    #vdwt1
  5112.  
  5113.     mov    edi,[ebp].SND_BUF
  5114.     mov    ecx,[ebp].SND_COUNTER
  5115.     cmp    ecx,0
  5116.     je    #vd_E
  5117.  
  5118.     mov    ax,10ch
  5119.     mov    fs,ax
  5120.     xor    eax,eax
  5121.     xor    ebx,ebx
  5122.  
  5123. #vd000:    mov    edx,04e8h
  5124.     in    al,dx
  5125.     test    al,1
  5126.     jne    short #vd001
  5127.     call    v02_snd_320
  5128.     jmp    short #vd000
  5129. #vd001:    mov    edx,04e7h
  5130.     in    al,dx
  5131.     stosb
  5132.     inc    dword ptr [ebp].COUNTER_START
  5133.     dec    ecx
  5134.     je    #vd_E
  5135.  
  5136. #vd010:    mov    edx,04e8h
  5137.     in    al,dx
  5138.     test    al,1
  5139.     jne    short #vd011
  5140.     call    v02_snd_320
  5141.     jmp    short #vd010
  5142. #vd011:    mov    edx,04e7h
  5143.     in    al,dx
  5144.     inc    dword ptr [ebp].COUNTER_START
  5145.  
  5146. #vd020:    mov    edx,04e8h
  5147.     in    al,dx
  5148.     test    al,1
  5149.     jne    short #vd021
  5150.     call    v02_snd_320
  5151.     jmp    short #vd020
  5152. #vd021:    mov    edx,04e7h
  5153.     in    al,dx
  5154.     stosb
  5155.     inc    dword ptr [ebp].COUNTER_START
  5156.     dec    ecx
  5157.     je    #vd_E
  5158.  
  5159. #vd030:    mov    edx,04e8h
  5160.     in    al,dx
  5161.     test    al,1
  5162.     jne    short #vd031
  5163.     call    v02_snd_320
  5164.     jmp    short #vd030
  5165. #vd031:    mov    edx,04e7h
  5166.     in    al,dx
  5167.     mov    [esp],eax
  5168.     inc    dword ptr [ebp].COUNTER_START
  5169.  
  5170. #vd040:    mov    edx,04e8h
  5171.     in    al,dx
  5172.     test    al,1
  5173.     jne    short #vd041
  5174.     call    v02_snd_320
  5175.     jmp    short #vd040
  5176. #vd041:    mov    edx,04e7h
  5177.     in    al,dx
  5178.     add    eax,[esp]
  5179.     shr    eax,1
  5180.     stosb
  5181.     inc    dword ptr [ebp].COUNTER_START
  5182.     dec    ecx
  5183.     je    #vd_E
  5184.  
  5185. #vd050:    mov    edx,04e8h
  5186.     in    al,dx
  5187.     test    al,1
  5188.     jne    short #vd051
  5189.     call    v02_snd_320
  5190.     jmp    short #vd050
  5191. #vd051:    mov    edx,04e7h
  5192.     in    al,dx
  5193.     stosb
  5194.     inc    dword ptr [ebp].COUNTER_START
  5195.     dec    ecx
  5196.     je    #vd_E
  5197.  
  5198. #vd060:    mov    edx,04e8h
  5199.     in    al,dx
  5200.     test    al,1
  5201.     jne    short #vd061
  5202.     call    v02_snd_320
  5203.     jmp    short #vd060
  5204. #vd061:    mov    edx,04e7h
  5205.     in    al,dx
  5206.     mov    [esp],eax
  5207.     inc    dword ptr [ebp].COUNTER_START
  5208.  
  5209. #vd070:    mov    edx,04e8h
  5210.     in    al,dx
  5211.     test    al,1
  5212.     jne    short #vd071
  5213.     call    v02_snd_320
  5214.     jmp    short #vd070
  5215. #vd071:    mov    edx,04e7h
  5216.     in    al,dx
  5217.     add    eax,[esp]
  5218.     shr    eax,1
  5219.     stosb
  5220.     inc    dword ptr [ebp].COUNTER_START
  5221.     dec    ecx
  5222.     je    #vd_E
  5223.  
  5224.     jmp    #vd000
  5225.  
  5226. #vd_E:    call    v02_snd_320
  5227.     inc    dword ptr [ebp].COUNTER_START
  5228.     cmp    dword ptr [ebp].GRF_COUNTER,0
  5229.     jg    #vd_E
  5230. #vd_E1:    call    v02_snd_320
  5231.     inc    dword ptr [ebp].COUNTER_START
  5232.     or    ebx,ebx
  5233.     jne    #vd_E1
  5234.  
  5235.     sti
  5236.  
  5237.     pop    eax        ; work
  5238.     xor    eax,eax
  5239.     pop    ebx
  5240.     pop    edi
  5241.     pop    esi
  5242.     mov    esp,ebp
  5243.     pop    ebp
  5244.     ret
  5245. v02_snd_trans_320_4    endp
  5246.  
  5247. ;int v02_snd_trans_320_5( char *snd_buf, int snd_counter 
  5248. ;              char *grf_buf, int grf_counter, int grf_wait
  5249. ;              int count_start, 
  5250. ;              char *table1, char *table2, char *work
  5251. ;            )
  5252. ;snd sampling freq=9200
  5253.  
  5254.     public    v02_snd_trans_320_5
  5255.     db    'v02_snd_trans_320_5',19
  5256. v02_snd_trans_320_5    proc    near
  5257.     push    ebp
  5258.     mov    ebp,esp
  5259.     push    esi
  5260.     push    edi
  5261.     push    ebx
  5262.  
  5263.     push    eax        ; work
  5264.  
  5265.     cli                    ;Int disable
  5266.     cld
  5267.  
  5268. #vdwt0:    mov    al,30        ; フィールドが1から0に変わる瞬間まで待つ
  5269.     mov    edx,0440h    ; この瞬間からタイミングを考慮して
  5270.     out    dx,al        ; 総合的にstart_countを決める必要がある
  5271.     mov    edx,0442h
  5272.     in    ax,dx
  5273.     test    eax,0800h
  5274.     je    #vdwt0
  5275. #vdwt1:    mov    al,30
  5276.     mov    edx,0440h
  5277.     out    dx,al
  5278.     mov    edx,0442h
  5279.     in    ax,dx
  5280.     test    eax,0800h
  5281.     jne    #vdwt1
  5282.  
  5283.     mov    edi,[ebp].SND_BUF
  5284.     mov    ecx,[ebp].SND_COUNTER
  5285.     cmp    ecx,0
  5286.     je    #vd_E
  5287.  
  5288.     mov    ax,10ch
  5289.     mov    fs,ax
  5290.     xor    eax,eax
  5291.     xor    ebx,ebx
  5292.  
  5293. #vd000:    mov    edx,04e8h
  5294.     in    al,dx
  5295.     test    al,1
  5296.     jne    short #vd001
  5297.     call    v02_snd_320
  5298.     jmp    short #vd000
  5299. #vd001:    mov    edx,04e7h
  5300.     in    al,dx
  5301.     mov    [esp],eax
  5302.     inc    dword ptr [ebp].COUNTER_START
  5303.  
  5304. #vd010:    mov    edx,04e8h
  5305.     in    al,dx
  5306.     test    al,1
  5307.     jne    short #vd011
  5308.     call    v02_snd_320
  5309.     jmp    short #vd010
  5310. #vd011:    mov    edx,04e7h
  5311.     in    al,dx
  5312.     add    eax,[esp]
  5313.     shr    eax,1
  5314.     stosb
  5315.     inc    dword ptr [ebp].COUNTER_START
  5316.     dec    ecx
  5317.     je    #vd_E
  5318.  
  5319.     jmp    #vd000
  5320.  
  5321. #vd_E:    call    v02_snd_320
  5322.     inc    dword ptr [ebp].COUNTER_START
  5323.     cmp    dword ptr [ebp].GRF_COUNTER,0
  5324.     jg    #vd_E
  5325. #vd_E1:    call    v02_snd_320
  5326.     inc    dword ptr [ebp].COUNTER_START
  5327.     or    ebx,ebx
  5328.     jne    #vd_E1
  5329.  
  5330.     sti
  5331.  
  5332.     pop    eax        ; work
  5333.     xor    eax,eax
  5334.     pop    ebx
  5335.     pop    edi
  5336.     pop    esi
  5337.     mov    esp,ebp
  5338.     pop    ebp
  5339.     ret
  5340. v02_snd_trans_320_5    endp
  5341.  
  5342. ;int v02_snd_trans_320_6( char *snd_buf, int snd_counter 
  5343. ;              char *grf_buf, int grf_counter, int grf_wait
  5344. ;              int count_start, 
  5345. ;              char *table1, char *table2, char *work
  5346. ;            )
  5347. ;snd sampling freq=8000
  5348.  
  5349.     public    v02_snd_trans_320_6
  5350.     db    'v02_snd_trans_320_6',19
  5351. v02_snd_trans_320_6    proc    near
  5352.     push    ebp
  5353.     mov    ebp,esp
  5354.     push    esi
  5355.     push    edi
  5356.     push    ebx
  5357.  
  5358.     push    eax        ; work
  5359.  
  5360.     cli                    ;Int disable
  5361.     cld
  5362.  
  5363. #vdwt0:    mov    al,30        ; フィールドが1から0に変わる瞬間まで待つ
  5364.     mov    edx,0440h    ; この瞬間からタイミングを考慮して
  5365.     out    dx,al        ; 総合的にstart_countを決める必要がある
  5366.     mov    edx,0442h
  5367.     in    ax,dx
  5368.     test    eax,0800h
  5369.     je    #vdwt0
  5370. #vdwt1:    mov    al,30
  5371.     mov    edx,0440h
  5372.     out    dx,al
  5373.     mov    edx,0442h
  5374.     in    ax,dx
  5375.     test    eax,0800h
  5376.     jne    #vdwt1
  5377.  
  5378.     mov    edi,[ebp].SND_BUF
  5379.     mov    ecx,[ebp].SND_COUNTER
  5380.     cmp    ecx,0
  5381.     je    #vd_E
  5382.  
  5383.     mov    ax,10ch
  5384.     mov    fs,ax
  5385.     xor    eax,eax
  5386.     xor    ebx,ebx
  5387.  
  5388. #vd000:    mov    edx,04e8h
  5389.     in    al,dx
  5390.     test    al,1
  5391.     jne    short #vd001
  5392.     call    v02_snd_320
  5393.     jmp    short #vd000
  5394. #vd001:    mov    edx,04e7h
  5395.     in    al,dx
  5396.     stosb
  5397.     inc    dword ptr [ebp].COUNTER_START
  5398.     dec    ecx
  5399.     je    #vd_E
  5400.  
  5401. #vd010:    mov    edx,04e8h
  5402.     in    al,dx
  5403.     test    al,1
  5404.     jne    short #vd011
  5405.     call    v02_snd_320
  5406.     jmp    short #vd010
  5407. #vd011:    mov    edx,04e7h
  5408.     in    al,dx
  5409.     inc    dword ptr [ebp].COUNTER_START
  5410.  
  5411. #vd020:    mov    edx,04e8h
  5412.     in    al,dx
  5413.     test    al,1
  5414.     jne    short #vd021
  5415.     call    v02_snd_320
  5416.     jmp    short #vd020
  5417. #vd021:    mov    edx,04e7h
  5418.     in    al,dx
  5419.     mov    [esp],eax
  5420.     inc    dword ptr [ebp].COUNTER_START
  5421.  
  5422. #vd030:    mov    edx,04e8h
  5423.     in    al,dx
  5424.     test    al,1
  5425.     jne    short #vd031
  5426.     call    v02_snd_320
  5427.     jmp    short #vd030
  5428. #vd031:    mov    edx,04e7h
  5429.     in    al,dx
  5430.     add    eax,[esp]
  5431.     shr    eax,1
  5432.     stosb
  5433.     inc    dword ptr [ebp].COUNTER_START
  5434.     dec    ecx
  5435.     je    #vd_E
  5436.  
  5437. #vd040:    mov    edx,04e8h
  5438.     in    al,dx
  5439.     test    al,1
  5440.     jne    short #vd041
  5441.     call    v02_snd_320
  5442.     jmp    short #vd040
  5443. #vd041:    mov    edx,04e7h
  5444.     in    al,dx
  5445.     inc    dword ptr [ebp].COUNTER_START
  5446.  
  5447. #vd050:    mov    edx,04e8h
  5448.     in    al,dx
  5449.     test    al,1
  5450.     jne    short #vd051
  5451.     call    v02_snd_320
  5452.     jmp    short #vd050
  5453. #vd051:    mov    edx,04e7h
  5454.     in    al,dx
  5455.     stosb
  5456.     inc    dword ptr [ebp].COUNTER_START
  5457.     dec    ecx
  5458.     je    #vd_E
  5459.  
  5460. #vd060:    mov    edx,04e8h
  5461.     in    al,dx
  5462.     test    al,1
  5463.     jne    short #vd061
  5464.     call    v02_snd_320
  5465.     jmp    short #vd060
  5466. #vd061:    mov    edx,04e7h
  5467.     in    al,dx
  5468.     inc    dword ptr [ebp].COUNTER_START
  5469.  
  5470. #vd070:    mov    edx,04e8h
  5471.     in    al,dx
  5472.     test    al,1
  5473.     jne    short #vd071
  5474.     call    v02_snd_320
  5475.     jmp    short #vd070
  5476. #vd071:    mov    edx,04e7h
  5477.     in    al,dx
  5478.     mov    [esp],eax
  5479.     inc    dword ptr [ebp].COUNTER_START
  5480.  
  5481. #vd080:    mov    edx,04e8h
  5482.     in    al,dx
  5483.     test    al,1
  5484.     jne    short #vd081
  5485.     call    v02_snd_320
  5486.     jmp    short #vd080
  5487. #vd081:    mov    edx,04e7h
  5488.     in    al,dx
  5489.     add    eax,[esp]
  5490.     shr    eax,1
  5491.     stosb
  5492.     inc    dword ptr [ebp].COUNTER_START
  5493.     dec    ecx
  5494.     je    #vd_E
  5495.  
  5496. #vd090:    mov    edx,04e8h
  5497.     in    al,dx
  5498.     test    al,1
  5499.     jne    short #vd091
  5500.     call    v02_snd_320
  5501.     jmp    short #vd090
  5502. #vd091:    mov    edx,04e7h
  5503.     in    al,dx
  5504.     inc    dword ptr [ebp].COUNTER_START
  5505.  
  5506. #vd100:    mov    edx,04e8h
  5507.     in    al,dx
  5508.     test    al,1
  5509.     jne    short #vd101
  5510.     call    v02_snd_320
  5511.     jmp    short #vd100
  5512. #vd101:    mov    edx,04e7h
  5513.     in    al,dx
  5514.     stosb
  5515.     inc    dword ptr [ebp].COUNTER_START
  5516.     dec    ecx
  5517.     je    #vd_E
  5518.  
  5519. #vd110:    mov    edx,04e8h
  5520.     in    al,dx
  5521.     test    al,1
  5522.     jne    short #vd111
  5523.     call    v02_snd_320
  5524.     jmp    short #vd110
  5525. #vd111:    mov    edx,04e7h
  5526.     in    al,dx
  5527.     inc    dword ptr [ebp].COUNTER_START
  5528.  
  5529.     jmp    #vd000
  5530.  
  5531. #vd_E:    call    v02_snd_320
  5532.     inc    dword ptr [ebp].COUNTER_START
  5533.     cmp    dword ptr [ebp].GRF_COUNTER,0
  5534.     jg    #vd_E
  5535. #vd_E1:    call    v02_snd_320
  5536.     inc    dword ptr [ebp].COUNTER_START
  5537.     or    ebx,ebx
  5538.     jne    #vd_E1
  5539.  
  5540.     sti
  5541.  
  5542.     pop    eax        ; work
  5543.     xor    eax,eax
  5544.     pop    ebx
  5545.     pop    edi
  5546.     pop    esi
  5547.     mov    esp,ebp
  5548.     pop    ebp
  5549.     ret
  5550. v02_snd_trans_320_6    endp
  5551.  
  5552. ;int v02_snd_trans_320_7( char *snd_buf, int snd_counter 
  5553. ;              char *grf_buf, int grf_counter, int grf_wait
  5554. ;              int count_start, 
  5555. ;              char *table1, char *table2, char *work
  5556. ;            )
  5557. ;snd sampling freq=6857
  5558.  
  5559.     public    v02_snd_trans_320_7
  5560.     db    'v02_snd_trans_320_7',19
  5561. v02_snd_trans_320_7    proc    near
  5562.     push    ebp
  5563.     mov    ebp,esp
  5564.     push    esi
  5565.     push    edi
  5566.     push    ebx
  5567.  
  5568.     push    eax        ; work
  5569.  
  5570.     cli                    ;Int disable
  5571.     cld
  5572.  
  5573. #vdwt0:    mov    al,30        ; フィールドが1から0に変わる瞬間まで待つ
  5574.     mov    edx,0440h    ; この瞬間からタイミングを考慮して
  5575.     out    dx,al        ; 総合的にstart_countを決める必要がある
  5576.     mov    edx,0442h
  5577.     in    ax,dx
  5578.     test    eax,0800h
  5579.     je    #vdwt0
  5580. #vdwt1:    mov    al,30
  5581.     mov    edx,0440h
  5582.     out    dx,al
  5583.     mov    edx,0442h
  5584.     in    ax,dx
  5585.     test    eax,0800h
  5586.     jne    #vdwt1
  5587.  
  5588.     mov    edi,[ebp].SND_BUF
  5589.     mov    ecx,[ebp].SND_COUNTER
  5590.     cmp    ecx,0
  5591.     je    #vd_E
  5592.  
  5593.     mov    ax,10ch
  5594.     mov    fs,ax
  5595.     xor    eax,eax
  5596.     xor    ebx,ebx
  5597.  
  5598. #vd000:    mov    edx,04e8h
  5599.     in    al,dx
  5600.     test    al,1
  5601.     jne    short #vd001
  5602.     call    v02_snd_320
  5603.     jmp    short #vd000
  5604. #vd001:    mov    edx,04e7h
  5605.     in    al,dx
  5606.     mov    [esp],eax
  5607.     inc    dword ptr [ebp].COUNTER_START
  5608.  
  5609. #vd010:    mov    edx,04e8h
  5610.     in    al,dx
  5611.     test    al,1
  5612.     jne    short #vd011
  5613.     call    v02_snd_320
  5614.     jmp    short #vd010
  5615. #vd011:    mov    edx,04e7h
  5616.     in    al,dx
  5617.     add    eax,[esp]
  5618.     shr    eax,1
  5619.     stosb
  5620.     inc    dword ptr [ebp].COUNTER_START
  5621.     dec    ecx
  5622.     je    #vd_E
  5623.  
  5624. #vd020:    mov    edx,04e8h
  5625.     in    al,dx
  5626.     test    al,1
  5627.     jne    short #vd021
  5628.     call    v02_snd_320
  5629.     jmp    short #vd020
  5630. #vd021:    mov    edx,04e7h
  5631.     in    al,dx
  5632.     inc    dword ptr [ebp].COUNTER_START
  5633.  
  5634. #vd030:    mov    edx,04e8h
  5635.     in    al,dx
  5636.     test    al,1
  5637.     jne    short #vd031
  5638.     call    v02_snd_320
  5639.     jmp    short #vd030
  5640. #vd031:    mov    edx,04e7h
  5641.     in    al,dx
  5642.     mov    [esp],eax
  5643.     inc    dword ptr [ebp].COUNTER_START
  5644.  
  5645. #vd040:    mov    edx,04e8h
  5646.     in    al,dx
  5647.     test    al,1
  5648.     jne    short #vd041
  5649.     call    v02_snd_320
  5650.     jmp    short #vd040
  5651. #vd041:    mov    edx,04e7h
  5652.     in    al,dx
  5653.     add    eax,[esp]
  5654.     shr    eax,1
  5655.     stosb
  5656.     inc    dword ptr [ebp].COUNTER_START
  5657.     dec    ecx
  5658.     je    #vd_E
  5659.  
  5660. #vd050:    mov    edx,04e8h
  5661.     in    al,dx
  5662.     test    al,1
  5663.     jne    short #vd051
  5664.     call    v02_snd_320
  5665.     jmp    short #vd050
  5666. #vd051:    mov    edx,04e7h
  5667.     in    al,dx
  5668.     inc    dword ptr [ebp].COUNTER_START
  5669.  
  5670. #vd060:    mov    edx,04e8h
  5671.     in    al,dx
  5672.     test    al,1
  5673.     jne    short #vd061
  5674.     call    v02_snd_320
  5675.     jmp    short #vd060
  5676. #vd061:    mov    edx,04e7h
  5677.     in    al,dx
  5678.     mov    [esp],eax
  5679.     inc    dword ptr [ebp].COUNTER_START
  5680.  
  5681. #vd070:    mov    edx,04e8h
  5682.     in    al,dx
  5683.     test    al,1
  5684.     jne    short #vd071
  5685.     call    v02_snd_320
  5686.     jmp    short #vd070
  5687. #vd071:    mov    edx,04e7h
  5688.     in    al,dx
  5689.     add    eax,[esp]
  5690.     shr    eax,1
  5691.     stosb
  5692.     inc    dword ptr [ebp].COUNTER_START
  5693.     dec    ecx
  5694.     je    #vd_E
  5695.  
  5696. #vd080:    mov    edx,04e8h
  5697.     in    al,dx
  5698.     test    al,1
  5699.     jne    short #vd081
  5700.     call    v02_snd_320
  5701.     jmp    short #vd080
  5702. #vd081:    mov    edx,04e7h
  5703.     in    al,dx
  5704.     inc    dword ptr [ebp].COUNTER_START
  5705.  
  5706. #vd090:    mov    edx,04e8h
  5707.     in    al,dx
  5708.     test    al,1
  5709.     jne    short #vd091
  5710.     call    v02_snd_320
  5711.     jmp    short #vd090
  5712. #vd091:    mov    edx,04e7h
  5713.     in    al,dx
  5714.     mov    [esp],eax
  5715.     inc    dword ptr [ebp].COUNTER_START
  5716.  
  5717. #vd100:    mov    edx,04e8h
  5718.     in    al,dx
  5719.     test    al,1
  5720.     jne    short #vd101
  5721.     call    v02_snd_320
  5722.     jmp    short #vd100
  5723. #vd101:    mov    edx,04e7h
  5724.     in    al,dx
  5725.     add    eax,[esp]
  5726.     shr    eax,1
  5727.     stosb
  5728.     inc    dword ptr [ebp].COUNTER_START
  5729.     dec    ecx
  5730.     je    #vd_E
  5731.  
  5732. #vd110:    mov    edx,04e8h
  5733.     in    al,dx
  5734.     test    al,1
  5735.     jne    short #vd111
  5736.     call    v02_snd_320
  5737.     jmp    short #vd110
  5738. #vd111:    mov    edx,04e7h
  5739.     in    al,dx
  5740.     inc    dword ptr [ebp].COUNTER_START
  5741.  
  5742. #vd120:    mov    edx,04e8h
  5743.     in    al,dx
  5744.     test    al,1
  5745.     jne    short #vd121
  5746.     call    v02_snd_320
  5747.     jmp    short #vd120
  5748. #vd121:    mov    edx,04e7h
  5749.     in    al,dx
  5750.     mov    [esp],eax
  5751.     inc    dword ptr [ebp].COUNTER_START
  5752.  
  5753. #vd130:    mov    edx,04e8h
  5754.     in    al,dx
  5755.     test    al,1
  5756.     jne    short #vd131
  5757.     call    v02_snd_320
  5758.     jmp    short #vd130
  5759. #vd131:    mov    edx,04e7h
  5760.     in    al,dx
  5761.     add    eax,[esp]
  5762.     shr    eax,1
  5763.     stosb
  5764.     inc    dword ptr [ebp].COUNTER_START
  5765.     dec    ecx
  5766.     je    #vd_E
  5767.  
  5768.     jmp    #vd000
  5769.  
  5770. #vd_E:    call    v02_snd_320
  5771.     inc    dword ptr [ebp].COUNTER_START
  5772.     cmp    dword ptr [ebp].GRF_COUNTER,0
  5773.     jg    #vd_E
  5774. #vd_E1:    call    v02_snd_320
  5775.     inc    dword ptr [ebp].COUNTER_START
  5776.     or    ebx,ebx
  5777.     jne    #vd_E1
  5778.  
  5779.     sti
  5780.  
  5781.     pop    eax        ; work
  5782.     xor    eax,eax
  5783.     pop    ebx
  5784.     pop    edi
  5785.     pop    esi
  5786.     mov    esp,ebp
  5787.     pop    ebp
  5788.     ret
  5789. v02_snd_trans_320_7    endp
  5790.  
  5791. ;
  5792. ;    ↓vram(320*240) trans
  5793. ;
  5794.  
  5795. DIV320_1    equ    2
  5796. DIV320_2    equ    2
  5797.  
  5798. v02_snd_320    proc    near
  5799.     push    eax
  5800.     push    ecx
  5801.     push    edi
  5802.     or    ebx,ebx
  5803.     jne    #vd01
  5804.  
  5805.     cmp    dword ptr [ebp].GRF_COUNTER,0
  5806.     jle    #vd10
  5807.     mov    eax,[ebp].GRF_WAIT
  5808.     cmp    eax,[ebp].COUNTER_START
  5809.     jg    #vd10
  5810.  
  5811.     push    eax
  5812.     mov    al,30
  5813.     mov    edx,0440h
  5814.     out    dx,al
  5815.     mov    edx,0442h
  5816.     in    ax,dx
  5817.     test    eax,0800h
  5818.     pop    eax
  5819.     je    #vd10
  5820.  
  5821.     sub    [ebp].COUNTER_START,eax
  5822.  
  5823.     mov    edi,[ebp].WK_AREA
  5824.     mov    esi,0
  5825.     mov    ecx,160/DIV320_1            ; vram 転送
  5826.     rep    movs dword ptr [edi],fs:[esi]
  5827.     mov    ds:v02_digit_wk,edi
  5828.     dec    dword ptr [ebp].GRF_COUNTER
  5829.     inc    ebx
  5830.     jmp    #vd10
  5831.  
  5832. #vd01:    cmp    ebx,240*DIV320_1
  5833.     je    short #vd03
  5834.     ja    #vd05
  5835.     mov    edi,ds:v02_digit_wk
  5836.     mov    ecx,160/DIV320_1            ; vram 転送
  5837.     rep    movs dword ptr [edi],fs:[esi]
  5838.     mov    ds:v02_digit_wk,edi
  5839.     inc    ebx
  5840.     test    ebx,DIV320_1-1
  5841.     jne    #vd10
  5842.     add    esi,1024*2-640
  5843. #vd02:    jmp    #vd10
  5844.  
  5845. #vd03:    push    ebp
  5846.     push    ebx
  5847.     mov    edi,[ebp].GRF_BUF
  5848.     mov    esi,[ebp].WK_AREA
  5849.     mov    ebp,[ebp].Y_TABLE
  5850.     xor    edx,edx
  5851.     mov    ecx,40/DIV320_2
  5852. #vd04:    lodsd
  5853.     mov    dx,ax
  5854.     shr    eax,16
  5855.     mov    dl,ds:[edx][ebp]
  5856.     mov    dh,ds:[eax][ebp]
  5857.     mov    bl,ds:[edx][ebp].32768
  5858.     lodsd
  5859.     mov    dx,ax
  5860.     shr    eax,16
  5861.     mov    dl,ds:[edx][ebp]
  5862.     mov    dh,ds:[eax][ebp]
  5863.     mov    bh,ds:[edx][ebp].32768
  5864.  
  5865.     shl    ebx,16
  5866.  
  5867.     lodsd
  5868.     mov    dx,ax
  5869.     shr    eax,16
  5870.     mov    dl,ds:[edx][ebp]
  5871.     mov    dh,ds:[eax][ebp]
  5872.     mov    bl,ds:[edx][ebp].32768
  5873.     lodsd
  5874.     mov    dx,ax
  5875.     shr    eax,16
  5876.     mov    dl,ds:[edx][ebp]
  5877.     mov    dh,ds:[eax][ebp]
  5878.     mov    bh,ds:[edx][ebp].32768
  5879.  
  5880.     rol    ebx,16
  5881.     mov    eax,ebx
  5882.     stosd
  5883.     loop    #vd04
  5884.  
  5885.     pop    ebx
  5886.     pop    ebp
  5887.     mov    [ebp].GRF_BUF,edi
  5888.     inc    ebx
  5889.     jmp    #vd10
  5890.  
  5891. #vd05:    cmp    ebx,240*DIV320_1+240*DIV320_2
  5892.     je    short #vd07
  5893.     ja    short #vd08
  5894.     push    ebp
  5895.     push    ebx
  5896.     mov    edi,[ebp].GRF_BUF
  5897.     mov    ebp,[ebp].Y_TABLE
  5898.     xor    edx,edx
  5899.     mov    ecx,40/DIV320_2
  5900. #vd06:    lodsd
  5901.     mov    dx,ax
  5902.     shr    eax,16
  5903.     mov    dl,ds:[edx][ebp]
  5904.     mov    dh,ds:[eax][ebp]
  5905.     mov    bl,ds:[edx][ebp].32768
  5906.     lodsd
  5907.     mov    dx,ax
  5908.     shr    eax,16
  5909.     mov    dl,ds:[edx][ebp]
  5910.     mov    dh,ds:[eax][ebp]
  5911.     mov    bh,ds:[edx][ebp].32768
  5912.  
  5913.     shl    ebx,16
  5914.  
  5915.     lodsd
  5916.     mov    dx,ax
  5917.     shr    eax,16
  5918.     mov    dl,ds:[edx][ebp]
  5919.     mov    dh,ds:[eax][ebp]
  5920.     mov    bl,ds:[edx][ebp].32768
  5921.     lodsd
  5922.     mov    dx,ax
  5923.     shr    eax,16
  5924.     mov    dl,ds:[edx][ebp]
  5925.     mov    dh,ds:[eax][ebp]
  5926.     mov    bh,ds:[edx][ebp].32768
  5927.  
  5928.     rol    ebx,16
  5929.     mov    eax,ebx
  5930.     stosd
  5931.     loop    #vd06
  5932.  
  5933.     pop    ebx
  5934.     pop    ebp
  5935.     mov    [ebp].GRF_BUF,edi
  5936.     inc    ebx
  5937.     jmp    #vd10
  5938.  
  5939. #vd07:    mov    esi,[ebp].WK_AREA
  5940. #vd08:    push    ebp
  5941.     push    ebx
  5942.     mov    edi,[ebp].GRF_BUF
  5943.     mov    ebp,[ebp].C_TABLE
  5944.     mov    edx,0000ffffh
  5945.     mov    ecx,40/DIV320_2
  5946.  
  5947. #vd09:    lodsd
  5948.     and    eax,0000ffffh
  5949.     mov    bl,ds:[eax][ebp]
  5950.     lodsd
  5951.     and    eax,0000ffffh
  5952.     mov    bh,ds:[eax][ebp]
  5953.  
  5954.     shl    ebx,16
  5955.  
  5956.     lodsd
  5957.     and    eax,0000ffffh
  5958.     mov    bl,ds:[eax][ebp]
  5959.     lodsd
  5960.     and    eax,0000ffffh
  5961.     mov    bh,ds:[eax][ebp]
  5962.  
  5963.     rol    ebx,16
  5964.     mov    eax,ebx
  5965.     stosd
  5966.     loop    #vd09
  5967.  
  5968.     pop    ebx
  5969.     pop    ebp
  5970.     mov    [ebp].GRF_BUF,edi
  5971.     inc    ebx
  5972.     test    ebx,DIV320_2-1
  5973.     jne    short #vd0A
  5974.     add    esi,320*2
  5975. #vd0A:    cmp    ebx,240*DIV320_1+240*DIV320_2+120*DIV320_2
  5976.     jne    short #vd10
  5977.     xor    ebx,ebx
  5978.  
  5979. #vd10:    pop    edi
  5980.     pop    ecx
  5981.     pop    eax
  5982.     ret
  5983. v02_snd_320    endp
  5984.  
  5985. ;
  5986. ;    ↑vram(256*192) trans
  5987. ;
  5988.  
  5989. ;    v02用ルーチン
  5990. ;int v02_trans_320_9600( char *snd_buf, int snd_counter 
  5991. ;              char *grf_buf, int grf_counter, int grf_wait
  5992. ;              int count_start, 
  5993. ;              char *table1, char *table2, char *work
  5994. ;            )
  5995. ;snd sampling freq=9600
  5996.  
  5997.     public    v02_trans_320_9600
  5998.     db    'v02_trans_320_9600',18
  5999. v02_trans_320_9600    proc    near
  6000.     push    ebp
  6001.     mov    ebp,esp
  6002.     push    esi
  6003.     push    edi
  6004.     push    ebx
  6005.  
  6006.     push    eax        ; work
  6007.  
  6008.     cli                    ;Int disable
  6009.     cld
  6010.  
  6011. #vdwt0:    mov    al,30        ; フィールドが1から0に変わる瞬間まで待つ
  6012.     mov    edx,0440h    ; この瞬間からタイミングを考慮して
  6013.     out    dx,al        ; 総合的にstart_countを決める必要がある
  6014.     mov    edx,0442h
  6015.     in    ax,dx
  6016.     test    eax,0800h
  6017.     je    #vdwt0
  6018. #vdwt1:    mov    al,30
  6019.     mov    edx,0440h
  6020.     out    dx,al
  6021.     mov    edx,0442h
  6022.     in    ax,dx
  6023.     test    eax,0800h
  6024.     jne    #vdwt1
  6025.  
  6026.     mov    edi,[ebp].SND_BUF
  6027.     mov    ecx,[ebp].SND_COUNTER
  6028.     cmp    ecx,0
  6029.     je    #vd_E
  6030.  
  6031.     mov    ax,10ch
  6032.     mov    fs,ax
  6033.     xor    eax,eax
  6034.     xor    ebx,ebx
  6035.  
  6036. #vd000:    mov    edx,04e8h
  6037.     in    al,dx
  6038.     test    al,1
  6039.     jne    short #vd001
  6040.     call    v02_snd_320
  6041.     jmp    short #vd000
  6042. #vd001:    mov    edx,04e7h
  6043.     in    al,dx
  6044.     mov    [esp],eax
  6045.     inc    dword ptr [ebp].COUNTER_START
  6046.  
  6047. #vd010:    mov    edx,04e8h
  6048.     in    al,dx
  6049.     test    al,1
  6050.     jne    short #vd011
  6051.     call    v02_snd_320
  6052.     jmp    short #vd010
  6053. #vd011:    mov    edx,04e7h
  6054.     in    al,dx
  6055.     add    eax,[esp]
  6056.     shr    eax,1
  6057.     stosb
  6058.     inc    dword ptr [ebp].COUNTER_START
  6059.     dec    ecx
  6060.     je    #vd_E
  6061.  
  6062.     jmp    #vd000
  6063.  
  6064. #vd_E:    call    v02_snd_320
  6065.     inc    dword ptr [ebp].COUNTER_START
  6066.     cmp    dword ptr [ebp].GRF_COUNTER,0
  6067.     jg    #vd_E
  6068. #vd_E1:    call    v02_snd_320
  6069.     inc    dword ptr [ebp].COUNTER_START
  6070.     or    ebx,ebx
  6071.     jne    #vd_E1
  6072.  
  6073.     sti
  6074.  
  6075.     pop    eax        ; work
  6076.     xor    eax,eax
  6077.     pop    ebx
  6078.     pop    edi
  6079.     pop    esi
  6080.     mov    esp,ebp
  6081.     pop    ebp
  6082.     ret
  6083. v02_trans_320_9600    endp
  6084.  
  6085. ;    v02用ルーチン
  6086. ;int v02_trans_320_19200( char *snd_buf, int snd_counter 
  6087. ;              char *grf_buf, int grf_counter, int grf_wait
  6088. ;              int count_start, 
  6089. ;              char *table1, char *table2, char *work
  6090. ;            )
  6091. ;snd sampling freq=19200
  6092.  
  6093.     public    v02_trans_320_19200
  6094.     db    'v02_trans_320_19200',19
  6095. v02_trans_320_19200    proc    near
  6096.     push    ebp
  6097.     mov    ebp,esp
  6098.     push    esi
  6099.     push    edi
  6100.     push    ebx
  6101.  
  6102.     cli                    ;Int disable
  6103.     cld
  6104.  
  6105. #vdwt0:    mov    al,30        ; フィールドが1から0に変わる瞬間まで待つ
  6106.     mov    edx,0440h    ; この瞬間からタイミングを考慮して
  6107.     out    dx,al        ; 総合的にstart_countを決める必要がある
  6108.     mov    edx,0442h
  6109.     in    ax,dx
  6110.     test    eax,0800h
  6111.     je    #vdwt0
  6112. #vdwt1:    mov    al,30
  6113.     mov    edx,0440h
  6114.     out    dx,al
  6115.     mov    edx,0442h
  6116.     in    ax,dx
  6117.     test    eax,0800h
  6118.     jne    #vdwt1
  6119.  
  6120.     mov    edi,[ebp].SND_BUF
  6121.     mov    ecx,[ebp].SND_COUNTER
  6122.     cmp    ecx,0
  6123.     je    #vd_E
  6124.  
  6125.     mov    ax,10ch
  6126.     mov    fs,ax
  6127.     xor    eax,eax
  6128.     xor    ebx,ebx
  6129.  
  6130. #vd000:    mov    edx,04e8h
  6131.     in    al,dx
  6132.     test    al,1
  6133.     jne    short #vd001
  6134.     call    v02_snd_320
  6135.     jmp    short #vd000
  6136. #vd001:    mov    edx,04e7h
  6137.     in    al,dx
  6138.     stosb
  6139.     inc    dword ptr [ebp].COUNTER_START
  6140.     dec    ecx
  6141.     jne    #vd000
  6142.  
  6143. #vd_E:    call    v02_snd_320
  6144.     inc    dword ptr [ebp].COUNTER_START
  6145.     cmp    dword ptr [ebp].GRF_COUNTER,0
  6146.     jg    #vd_E
  6147. #vd_E1:    call    v02_snd_320
  6148.     inc    dword ptr [ebp].COUNTER_START
  6149.     or    ebx,ebx
  6150.     jne    #vd_E1
  6151.  
  6152.     sti
  6153.  
  6154.     xor    eax,eax
  6155.     pop    ebx
  6156.     pop    edi
  6157.     pop    esi
  6158.     mov    esp,ebp
  6159.     pop    ebp
  6160.     ret
  6161. v02_trans_320_19200    endp
  6162.  
  6163.  
  6164. cseg    ends
  6165.     end
  6166.  
  6167.